#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
int xuehao;
char name[20];
int chinese;
int math;
int english;
float cj;
}student;
typedef struct Node
{
student stu;
struct Node* next;
}Node;
Node* initList();
void addStudent(Node* list);
void showStudent(Node* list);
void addCount(Node* list);
void sortBycj(Node* list);
void searchStudent(Node* list);
void deleteStudent(Node* list);
void modifyStudent(Node* list);
void save(Node* list);
void read(Node* list);
void menu()
{
printf("**********************************\n");
printf(" * 学生成绩管理系统——帮助菜单 * \n");
printf("**********************************\n");
printf(" * 1. 添加学生信息 * \n");
printf(" * 2. 查看学生信息 * \n");
printf(" * 3. 计算总成绩 * \n");
printf(" * 4. 依总成绩排序 * \n");
printf(" * 5. 查找学生信息 * \n");
printf(" * 6. 删除学生信息 * \n");
printf(" * 7. 修改学生信息 * \n");
printf(" * 8. 清屏 * \n");
}
Node* initList()
{
Node* p = (Node*)malloc(sizeof(Node));
memset(&p->stu,0,sizeof(student));
p->next = NULL;
return p;
}
void save(Node* list)
{
Node* node = list->next;
FILE *w =fopen("score.txt","w");
if(w==NULL)
{
printf("打开文件失败!");
return;
}
while(node)
{
fprintf(w,"\t%d\t%s\t%d\t%d\t%d\t%.2f\n",node->stu.xuehao,
node->stu.name,
node->stu.chinese,
node->stu.math,
node->stu.english,
node->stu.cj);
node=node->next;
fprintf(w,"\n");
}
printf("\n");
fclose(w);
}
void read(Node* list)
{
Node* node = list;
Node *q;
q=(Node*)malloc(sizeof(Node));
if(node==NULL)
return;
FILE *r=fopen("score.txt","r");
if(r==NULL)
{
printf("打开文件失败!\n");
return;
}
while(fscanf(r,"\t%d\t%s\t%d\t%d\t%d\t%.2f\n",&q->stu.xuehao,
&q->stu.name,
&q->stu.chinese,
&q->stu.math,
&q->stu.english,
&q->stu.cj)!=EOF)
{
node->next=q;
node=q;
fscanf(r,"\n");
q=(Node*)malloc(sizeof(Node));
}
node->next=NULL;
fclose(r);
}
void addStudent(Node* list)
{
Node* node = (Node*)malloc(sizeof(Node));
memset(&node->stu,0,sizeof(student));
node->stu.xuehao = list->stu.chinese + 1000;
printf("请输入姓名:");
scanf("%s",node->stu.name);
printf("请输入语文成绩:");
scanf("%d",&node->stu.chinese);
printf("请输入数学成绩:");
scanf("%d",&node->stu.math);
printf("请输入英语成绩:");
scanf("%d",&node->stu.english);
node->next = list->next;
list->next = node;
list->stu.chinese++;
printf("插入成功!\n");
save(list);
}
void showStudent(Node* list)
{
list = list->next;
printf("\n");
printf("\t%s\t%s\t%s\t%s\t%s\t%s\n%","学号","姓名","语文","数学","英语","总成绩");
while (list)
{
printf("\t%d\t%s\t%d\t%d\t%d\t%.2f\n",list->stu.xuehao,
list->stu.name,
list->stu.chinese,
list->stu.math,
list->stu.english,
list->stu.cj);
list = list->next;
}
printf("\n");
}
void addCount(Node* list)
{
if (list->next == NULL)
{
printf("没有成绩可计算!\n");
return;
}
list = list->next;
while (list)
{
list->stu.cj = list->stu.chinese + list->stu.math + list->stu.english;
list = list->next;
}
printf("计算完毕!\n");
save(list);
}
void sortBycj(Node* list)
{
if (list->next == NULL)
{
printf("没有成绩可排序!\n");
return;
}
Node* sortedList = initList();
Node* current = list->next;
while (current)
{
Node* pre = current->next;
Node* ptr = sortedList;
while(ptr)
{
if (ptr->next == NULL || current->stu.cj < ptr->next->stu.cj)
{
current->next = ptr->next;
ptr->next = current;
sortedList->stu.chinese++;
break;
}
else
{
ptr = ptr->next;
}
}
current = pre;
}
list->stu = sortedList->stu;
list->next = sortedList->next;
free(sortedList);
sortedList = NULL;
printf("排序完毕!\n");
save(list);
}
void searchStudent(Node* list)
{
printf("请输入要查找的学号:");
if (list->next == NULL)
{
printf("没有信息可查询!\n");
return;
}
int num;
scanf("%d",&num);
getchar();
list = list->next;
while (list)
{
if (num == list->stu.xuehao)
{
printf("\n");
printf("\t%s\t%s\t%s\t%s\t%s\t%s\n%","学号","姓名","语文","数学","英语","总成绩");
printf("\t%d\t%s\t%d\t%d\t%d\t%.2f\n",list->stu.xuehao,
list->stu.name,
list->stu.chinese,
list->stu.math,
list->stu.english,
list->stu.cj);
printf("\n");
return;
}
list = list->next;
}
printf("学生信息不存在!\n");
}
void deleteStudent(Node* list)
{
printf("请输入要删除的学号:\n");
if (list->next == NULL)
{
printf("没有信息可删除!\n");
return;
}
int xuehao;
Node* pre = list;
Node* current = list->next;
scanf("%d",&xuehao);
getchar();
while (current)
{
if (current->stu.xuehao == xuehao)
{
pre->next = current->next;
free(current);
current = NULL;
printf("已删除!\n");
list->stu.chinese--;
return;
}
pre = current;
current = current->next;
}
printf("学生信息不存在!\n");
save(list);
}
void modifyStudent(Node* list)
{
if (list->next == NULL)
{
printf("没有信息可修改!\n");
return;
}
int xuehao;
printf("请输入要修改的学号:\n");
scanf("%d",&xuehao);
getchar();
list = list->next;
while (list)
{
if (list->stu.xuehao == xuehao)
{
printf("请输入姓名:\n");
scanf("%s",list->stu.name);
printf("请输入语文成绩:");
scanf("%d",&list->stu.chinese);
printf("请输入数学成绩:");
scanf("%d",&list->stu.math);
printf("请输入英语成绩:");
scanf("%d",&list->stu.english);
printf("修改成功!\n");
return;
}
list = list->next;
}
printf("学生信息不存在!\n");
save(list);
}
int main()
{
int input;
Node* list = initList();
read(list);
while(1)
{
menu();
printf("请输入:");
scanf("%d",&input);
getchar();
switch(input)
{
case 1:
addStudent(list);
break;
case 2:
showStudent(list);
break;
case 3:
addCount(list);
break;
case 4:
sortBycj(list);
break;
case 5:
searchStudent(list);
break;
case 6:
deleteStudent(list);
break;
case 7:
modifyStudent(list);
break;
case 8:
system("cls");
break;
default:
printf("输入指令有误!\n");
break;
}
}
return 0;
}
数据结构存盘怎么办哦(⊙o⊙)?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 摆烂的程序员阿轩. 2023-10-08 19:34关注
参考gpt
存盘可以使用文件操作,将数据结构存储到文本文件中。在代码中已经定义了两个函数:save()
和read()
用来保存和读取数据。在save()
函数中,通过打开文件,将链表中的数据逐个输出到文本文件中。在read()
函数中,通过打开文件,逐行读取文本文件中的数据,生成一个新的链表。代码如下:void save(Node* list) { Node* node = list->next; FILE *w =fopen("score.txt","w"); if(w==NULL) { printf("打开文件失败!"); return; } while(node) { fprintf(w,"\t%d\t%s\t%d\t%d\t%d\t%.2f\n",node->stu.xuehao, node->stu.name, node->stu.chinese, node->stu.math, node->stu.english, node->stu.cj); node=node->next; fprintf(w,"\n"); } printf("\n"); fclose(w); } void read(Node* list) { Node* node = list; Node *q; q=(Node*)malloc(sizeof(Node)); if(node==NULL) return; FILE *r=fopen("score.txt","r"); if(r==NULL) { printf("打开文件失败!\n"); return; } while(fscanf(r,"\t%d\t%s\t%d\t%d\t%d\t%.2f\n",&q->stu.xuehao, &q->stu.name, &q->stu.chinese, &q->stu.math, &q->stu.english, &q->stu.cj)!=EOF) { node->next=q; node=q; fscanf(r,"\n"); q=(Node*)malloc(sizeof(Node)); } node->next=NULL; fclose(r); }
可以在程序退出前调用
save()
将数据存储到文本文件中,再次运行程序时,调用read()
函数读取文本文件中的数据生成链表结构。解决 无用评论 打赏 举报
悬赏问题
- ¥15 无源定位系统的时差估计误差标准差
- ¥15 请问这个代码哪里有问题啊
- ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
- ¥15 通过GaussianView进行结构微调消除虚频
- ¥15 调用transformers库
- ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
- ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
- ¥15 openpcdet自制数据集评估bev精度和3d精度相同
- ¥15 excel 上下按钮 显示行
- ¥20 云卓h12pro 数传问题