1.添加学生
2.删除学生
3.浏览学生
4.查找学生
5.修改学生信息
6.文件操作
添加学生:首要通过scanf_s函数来输入学生的信息。对于总分,平均分可以通过输入的学生的各科的成绩来计算。然后,调用插入函数insertData来实现对学生信息的插入并同时通过savafile来保存到文件种。
主要代码如下:
printf("请输入学生的信息(name,num,math,English,py):");
scanf_s(" %s%s%d%d%d", temp.name,20, temp.num, 20,&temp.math, &temp.English, &temp.py);
//手动处理
temp.sum = temp.math + temp.English + temp.py;
temp.average = temp.sum / 3;
insertData(list, temp);
savafile(list, "student.txt");
insertData函数代码:
void insertData(struct Node* headNode, struct student data)
{
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
savafile函数代码如下:
void savafile(struct Node* headNode, const char* fileName)
{
struct Node* pmove = headNode->next;
FILE* fp = fopen(fileName, "w");
while (pmove != NULL)
{
fprintf(fp, "%s\t%s\t%d\t%d\t%d\t%d\t%d\n", pmove->data.name, pmove->data.num, pmove->data.math
, pmove->data.English, pmove->data.py, pmove->data.sum, pmove->data.average);
pmove = pmove->next;
}
fclose(fp);
}
删除学生:我设计的比较简单是通过学生的姓名来作为关键字来删除学生信息。通过输入要删除学生的信息,调用deleteName函数来删除学生的信息。并把删除操作同步到文件(只要涉及学生的信息改动,都要同步到文件)
主要代码如下:
printf("请输入要删除学生的姓名:");
scanf_s("%s", temp.name, 20);
deleteName(list, temp.name);
savafile(list, "student.txt");
deleteName函数代码如下:
void deleteName(struct Node* headNode, const char* name)
{
struct Node* preNode = headNode;
struct Node* curNode = headNode->next;
while (curNode != NULL && strcmp(curNode->data.name, name))
{
preNode = curNode;
curNode = preNode->next;
}
if (curNode == NULL)
{
printf("删除失败!!,没有找到数据");
}
else
{
preNode->next = curNode->next;
free(curNode);
}
}
浏览学生信息:就是把现有的学生信息打印出来。也就是实现对列表的打印。
void printlist(struct Node* headNode)
{
struct Node* move = headNode->next;
printf("姓名\t编号\t数学\t英语\tpy\t总分\t平均分\t\n");
while (move != NULL)
{
printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n", move->data.name,move->data.num,move->data.math
,move->data.English,move->data.py,move->data.sum,move->data.average);
move = move->next;
}
}
查找学生信息:通过输入要查找的学生的姓名(也可以是编号等,小编在这里没有添加,小伙伴们可以根据自己的需要添加)通过调用searchName函数来查找,通过strcmp来看姓名是否匹配。
主要代码如下:
printf("请输入要查找的学生姓名:");
scanf_s("%s", temp.name, 20);
result = searchName(list, temp.name);
if (result != NULL)
{
printf("姓名\t编号\t数学\t英语\tpy\t总分\t平均分\t\n");
printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",
result->data.name,
result->data.num,
result->data.math,
result->data.English,
result->data.py,
result->data.sum,
result->data.average);
}
else
{
printf("查找不存在\n");
}
searchName函数代码:
struct Node* searchName(struct Node* headNode, const char* name)
{
struct Node* move = headNode->next;
while (move != NULL && strcmp(move->data.name,name))
{
move = move->next;
}
return move;
}
修改学生信息:通过输入学生的姓名来删除学生信息,通过searchName函数来查找到要删除的学生。并同步到文件里面。
主要代码如下:
printf("请输入要修改的学生姓名");
scanf_s("%s", temp.name, 20);
result = searchName(list, temp.name);
if (result != NULL)
{
printf("请输入学生新的信息(name,num,math,English,py):");
scanf_s(" %s%s%d%d%d", result->data.name, 20, result->data.num, 20, &result->data.math, &result->data.English, &result->data.py);
result->data.sum = result->data.math + result->data.English + result->data.py;
result->data.average = result->data.sum / 3;
savafile(list, "student.txt");
}
else
{
printf("找不到要修改的学生信息\n");
}
文件操作:主要实现方便学生的信息的管理。把学生的信息同步到文件中。
主要代码如下:
void readFromFile(struct Node* headNode, const char* fileName)
{
FILE* fp = fopen(fileName, "r");
if (fp == NULL)
{
fp = fopen(fileName, "w+");
fclose(fp);
}
struct student temp;
while (fscanf(fp, "%s\t%s\t%d\t%d\t%d\t%d\t%d\n",
temp.name,
temp.num,
&temp.math,
&temp.English,
&temp.py,
&temp.sum,
&temp.average) != EOF)
{
insertData(list, temp);
}
fclose(fp);
}
主页面如下:
输入的信息如下(通过浏览功能打印出来):
查找功能:
修改功能:
删除功能:
删除小灰后的学生信息:
查看文件,看学生信息是否保存到文件中:
成功保存。
好啦!!!以上就是本篇博客的全部内容。喜欢的可以点赞+收藏+关注。你们的喜欢,是小编持续更新的动力。想要源码的可以关注小编后,在评论区留言。祝大家每天学习进步,天天开心。