本文共 8404 字,大约阅读时间需要 28 分钟。
因为目前工作的需要,看着C Primer Plus把C语言粗略的过了一遍。为了巩固自己的知识,故试着写了这个学生成绩管理系统。
此处感谢大佬"渣渣的夏天"的文章声明:因个人能力有限,本文仅是个人的学习记录笔记,有错误之处还望指出
void show_menu(){ printf("*********************************************************\n"); printf("*\t 学生管理系统\t\t\t\t*\n"); printf("*********************************************************\n"); printf("*\t\t1.录入学生信息\t\t\t\t*\n"); printf("*\t\t2.打印学生信息\t\t\t\t*\n"); printf("*\t\t3.保存学生信息\t\t\t\t*\n"); printf("*\t\t4.读取学生信息\t\t\t\t*\n"); printf("*\t\t5.已录入学生个数\t\t\t*\n"); printf("*\t\t6.查找学生信息 \t\t\t*\n"); printf("*\t\t7.修改学生信息 \t\t\t*\n"); printf("*\t\t8.删除学生信息 \t\t\t*\n"); printf("*\n"); printf("*返回主目录\n"); printf("*********************************************************\n"); printf("\n请选择功能\n");}
//通过while循环一直读取用户输入,并通过switch来进行相应的选项处理int main(){ while(1){ int i; show_menu(); scanf("%d",&i); switch (i){ case 1: addinfo(); break; case 2: PrintInfo(); break; case 3: savestuent(); break; case 4: ReadStudentInfo(); break; case 5: CountItem(); break; case 6: FindStudent(); break; case 7: ChangeStudent(); break; case 8: DelStudent(); break; default : printf("输入错误\n\n"); } }}
//1.录入信息void addinfo(){ //创建一个人,在堆中分配内存 Node *pnew = (Node *)malloc(sizeof(Node)); //指针指向下一个为空 pnew->next = NULL; //遍历链表 Node *q =head; while(head !=NULL &&q->next !=NULL){ q=q->next; } //把结点查到尾结点 if(head == NULL){ head=pnew; }else{ q->next = pnew; } //录入信息 printf("请输入学号\n"); scanf("%ld",&pnew->stu.num); printf("请输入姓名\n"); scanf("%s",pnew->stu.name); printf("请输入性别\n"); scanf("%s",pnew->stu.sex); printf("请输入数学\n"); scanf("%d",&pnew->stu.maths); printf("请输入英语\n"); scanf("%d",&pnew->stu.english); //总分 pnew->stu.total = pnew->stu.maths+pnew->stu.english; printf("学生信息录入成功\n\n");}
//2.打印学生信息void PrintInfo(){ Node *p=head; //头指针 if(p==NULL){ printf("学生信息不存在,请录入信息\n"); }else { printf("*********************************************************\n"); printf("*\t\t学生信息表\t\t\t\t*\n"); printf("*\t学号\t姓名\t性别\t数学\t英语\t总成绩\t*\n"); while(p!=NULL){ printf("*\t%ld\t%s\t%s\t%d\t%d\t%d\n\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.maths, p->stu.english, p->stu.total ); p=p->next;//下一个结点 } printf("*********************************************************\n\n"); }}
//3.保存学生信息void savestuent(){ int i; //打开文件 FILE *fd = fopen(FILE_PATH,"w"); if(fd == NULL){ printf("打开文件失败\n"); return ; } fprintf(fd,"\t学号\t姓名\t性别\t数学\t英语\t总成绩\t\n"); //写入数据 Node *p=head; while (p != NULL) { //把链表数据写入文件中 fprintf(fd,"\t%ld\t%s\t%s\t%d\t%d\t%d\n\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.maths, p->stu.english, p->stu.total ); p=p->next; //下一个结点 } fclose(fd); //关闭文件 printf("保存成功\n"); }
//4.读取学生信息void ReadStudentInfo(){ //只读打开文件 FILE *fd=fopen(FILE_PATH,"r"); if(fd == NULL){ printf("打开文件失败!\n"); exit(1); } Node* pNewNode ; //创建一个学生的节点 Node *P=(Node *)malloc(sizeof(Node)); P->next = NULL; head=P; //建立链表 //逐个单词读取文本内容 char str[200]; int i =0; //读取文件 while(fscanf(fd,"%s",str) != EOF){ //读文件 //单词不是*或者空的时候,进行赋值 if (strcmp(str,"*")&&str!=NULL) { switch(i){ case 0: P->stu.num=atoi(str);break; case 1: strcpy(P->stu.name,str);break; case 2: strcpy(P->stu.sex,str);break; case 3: P->stu.maths=atoi(str);break; case 4: P->stu.english=atoi(str);break; case 5: P->stu.total=atoi(str);break; default: pNewNode= (Node*)malloc(sizeof(Node)); pNewNode->next=NULL; P->next=pNewNode; P->stu.num=atoi(str); i=0; break; } i++; } } printf("读取信息成功\n\n"); //打印结果 PrintInfo();};
//5.读取学生个数void CountItem(){ int count = 0; Node *p = head; while(p !=NULL){ count++; p=p->next; } printf("学生总人数为:%d\n\n",count);}
//6.查找学生信息bool FindStudent(){ //通过学生姓名来查找 bool Showhead=false; //对表头进行展示 bool isfind=false; //记录找到学生信息 Node *p=head; char str[8]; printf("请输入学生的姓名:\n"); scanf("%s",str); while(p != NULL){ //字符串比较 if (strcmp(str,p->stu.name) == 0){ if(!Showhead){ printf ("*********************************************************\n ") ; printf("*\t\t学生信息表\t\t\t\t*\n"); printf("*\t学号\t姓名\t性别\t数学\t英语\t总成绩\t*\n"); Showhead=true; } printf("*\t%ld\t%s\t%s\t%d\t%d\t%d\n\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.maths, p->stu.english, p->stu.total); isfind =true; printf("*********************************************************\n\n"); } p=p->next;//下一个结点 } if(!isfind){ printf("没有找到该学生信息"); return false; }}
//7.修改学生信息void ChangeStudent(){ Node *p; int num; bool Showhead=false; //对表头进行展示 bool isFindSTU=false; //记录找到学生信息 printf("请输入要修改的学生学号\n"); scanf("%d",&num); p=head; while(p!=NULL){ if (num==p->stu.num) { if(!Showhead){ printf("*********************************************************\n"); printf("*\t\t学生信息表\t\t\t\t*\n"); printf("*\t学号\t姓名\t性别\t数学\t英语\t总成绩\t*\n"); Showhead=true; } printf("*\t%ld\t%s\t%s\t%d\t%d\t%d\n\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.maths, p->stu.english, p->stu.total); //此次获取修改的信息 printf("请输入学号:\n"); scanf("%ld",&p->stu.num); printf("请输入姓名:\n"); scanf("%s",p->stu.name); printf("请输入性别:\n"); scanf("%s",p->stu.sex); printf("请输入数学:\n"); scanf("%d",&p->stu.maths); printf("请输入英语:\n"); scanf("%d",&p->stu.english); //总分 p->stu.total = p->stu.maths+p->stu.english; isFindSTU=true; } p=p->next; } if(!isFindSTU) printf("学号输入有误\n\n"); savestuent(); //调用保存学生信息函数}
//8.删除学生信息void DelStudent(){ Node *p,*delp; int num; printf("请输入要删除的学生学号\n"); scanf("%d",&num); p=head; while(p!=NULL){ if (num==p->stu.num) { //删除节点为头结点 if(p==head) head=p->next; //要删除的结点为尾节点 else if(p->next==NULL){ p=delp; p->next=NULL; } //删除节点为中间节点 else { delp->next = p->next; } printf("删除成功,请记得保存。\n\n"); } delp=p; p=p->next; }}
主界面
录入信息
打印信息
保存读取信息
已经录入学生个数
查找学生信息
修改学生信息
删除学生信息
关于我:一个就要进入互联网,经历社会毒打的99小伙
欢迎各位指出问题,一起探讨
转载地址:http://bjgmz.baihongyu.com/