[置顶] 数据结构课程设计-学生成绩管理系统
2015-12-25 08:51
876 查看
学生成绩管理系统
1.头文件
[align=left]读文件操作文件截图:[/align]
运行结果;
1.用户界面登陆
2.管理界面
3.按照班级查找成绩单
4.增添保存学生功能:
5.显示不及格学生成绩
6.显示按照平均成绩从高到低排序
[align=left]设计心得:[/align]
[align=left]三天的课程设计,通过对代码的调试,对整体框架系统的构思,让我受益匪浅,希望自己可以在这次课程设计中找到自己的不足,以后认真对待并且去克服它,多思考,多总结,这样学习才会达到事半功倍的效果。[/align]
[align=left] 2015.12.27[/align]
1.头文件
<span style="font-size:18px;">//第一门成绩即为语文成绩 //第二门成绩即为数学成绩 //第三门成绩即为英语成绩 #include<stdio.h> #include<conio.h> #include<malloc.h> #include<string.h> #include<string> #include<windows.h> #include<iostream> using namespace std; typedef struct STUDENT { char studentNumber[10];/*学生学号*/ char studentName[20];/*学生姓名*/ char className[20];/*班级名称*/ char yearName[20];/*学期名称*/ float mark1;/*第1门成绩*/ float mark2;/*第2门成绩*/ float mark3;/*第3门成绩*/ struct STUDENT *next; }STUDENT; STUDENT *headLink;/*链表表头指针*/ /*以下是函数声明*/ void ReadInfoFormFile(void); void DesplayMenu(void); void CreateHeadLink(void); STUDENT *MallocNode(void); void GetInformation(STUDENT *t); void OutputInformation(void); void DesplayInfoBystudentName(void); void DesplayOneNode(STUDENT *t); void InsertOneNode(STUDENT *t); void DeleteNodeBystudentNumber(void); void ChangeMarkByName(void); void ChangeMarkByNumber(void); void SaveLinkToFile(void); void DesplayMarkSegment(void); void CompositorByTotalMark(void);</span>2.源文件
<span style="font-size:18px;">#include"head.h" int choose;/*用于接受用户的选择*/ /*主函数*/ void welcome()//登录考试报名管理系统 { printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\t*****************************************************************\n"); printf("\t 欢迎进入考试报名管理系统 \n"); printf("\t*****************************************************************\n"); char username[20]; string passward; printf("\n"); printf("\t\t\t请输入用户名: "); gets(username); printf("\n"); printf("\t\t\t请输入您的密码:"); cin>>passward; // gets(passward); while(passward!="123456") { printf("密码错误,请重新输入!!!\n"); printf("请输入用户名:"); gets(username); // scanf("%d\n",username); printf("请输入密码:"); // scanf("%d\n",passward); cin>>passward; } system("cls"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\t\t*************************************\n"); printf("\t\t* 密码正确,请稍候 !!! *\n"); printf("\t\t*************************************\n"); Sleep(3000); system("cls"); } void main() { CreateHeadLink(); ReadInfoFormFile(); DesplayMenu(); } /************************************ 函数功能:从文件中读学生信息到链表中 ************************************/ void ReadInfoFormFile(void) { welcome(); FILE *fp; STUDENT *p; fp=fopen("student.txt","r"); if(!fp) { printf("文件不存在\n"); return; } p=MallocNode(); while(fscanf(fp,"%s%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,p->yearName,&(p->mark1),&(p->mark2),&(p->mark3))>0) { InsertOneNode(p); p=MallocNode(); } fclose(fp); } /************************************ 函数功能:显示菜单,根据用户的输入 完成相应的功能 ************************************/ void DesplayMenu(void) { STUDENT *p; 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"); printf(" ┃ 9.按平均成绩排序并输出成绩┃\n"); printf(" ┃ 10.退出系统哟┃\n"); printf(" ┗━━━━━━━━━━━━━━━━━━━━┛\n"); printf("老师寄语:成绩并不代表什么,关键要从中吸取经验和教训,再接再厉!重新树立起好的心态哦,踏踏实实的走下去吧^_^\n"); printf(">>请输入选择:"); scanf("%d",&choose);/*取得用户的选择*/ printf("\n"); switch(choose) { case 1: OutputInformation();/*显示所有学生的信息*/ break; case 2: DesplayInfoBystudentName(); break; case 3: p=MallocNode();/*先申请一个新结点*/ GetInformation(p);/*要求用户输入信息到新结点中*/ InsertOneNode(p);/*将新结点加到链表中*/ break; case 4: DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/ break; case 5: ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/ break; case 6: ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/ break; case 7: SaveLinkToFile();/*保存数据*/ break; case 8: DesplayMarkSegment();/*显示不及格的学生成绩*/ break; case 9: CompositorByTotalMark();/*按平均成绩排序*/ break; case 10: SaveLinkToFile();/*保存数据后再退出*/ free(headLink); break; default: break; } DesplayMenu();/*递归调用*/ } /************************************ 函数功能:建立链表表头 ************************************/ void CreateHeadLink(void) { STUDENT *p; p=(STUDENT*)malloc(sizeof(STUDENT)); headLink=p; p->next=NULL; } /************************************ 函数功能:申请一个新结点,并将其初始化 ************************************/ STUDENT *MallocNode(void) { STUDENT *p; int i; p=(STUDENT*)malloc(sizeof(STUDENT)); if(p==NULL) return NULL; for(i=0;i<10;i++) p->studentNumber[i]='\0'; for(i=0;i<20;i++) p->studentName[i]='\0'; for(i=0;i<20;i++) p->className[i]='\0'; for(i=0;i<20;i++) p->yearName[i]='\0'; p->mark1=0.0; p->mark2=0.0; p->mark3=0.0; p->next=NULL; return p; } /************************************ 函数功能:取得用户输入的学生信息 ************************************/ void GetInformation(STUDENT *t) { printf("请输入学生学号:"); scanf("%s",t->studentNumber); printf("请输入学生姓名:"); scanf("%s",t->studentName); printf("请输入该生所在班级:"); scanf("%s",t->className); printf("请输入学期:"); scanf("%s",t->yearName); printf("请输入第1门课成绩:"); scanf("%f",&(t->mark1)); printf("请输入第2门课成绩:"); scanf("%f",&(t->mark2)); printf("请输入第3门课成绩:"); scanf("%f",&(t->mark3)); } /************************************ 函数功能:在链表的结尾处增加一个结点 ************************************/ void InsertOneNode(STUDENT *t) { STUDENT *p; p=headLink; while(p->next) { p=p->next; } p->next=t; } /************************************ 函数功能:根据用户输入的学生姓名显示该学生的信息 ************************************/ void DesplayInfoBystudentName(void) { STUDENT *p; char studentName[20]; char flag=0; p=headLink->next; printf("请输入学生姓名:"); scanf("%s",studentName); while(p) { if(strcmp(p->studentName,studentName)==0) { printf("学号\t姓名\t班级\t学期\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n"); DesplayOneNode(p); flag=1; break; } p=p->next; } if(!flag) printf("对不起,(╯^╰〉不存在姓名为 %s 的学生\n",studentName); } /************************************ 函数功能:输出一个结点的信息 ************************************/ void DesplayOneNode(STUDENT *t) { printf("%s\t",t->studentNumber); printf("%s\t",t->studentName); printf("%s\t",t->className); printf("%s\t",t->yearName); printf("%.2f\t",t->mark1); printf("%.2f\t",t->mark2); printf("%.2f\t",t->mark3); printf("%.2f\t",t->mark1+t->mark2+t->mark3); printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3); } /************************************ 函数功能:根据用户输入的学号删除该学生 ************************************/ void DeleteNodeBystudentNumber(void) { char studentNumber[10]; STUDENT *p,*q; char flag=0; printf("请输入要删除的学生学号:"); scanf("%s",studentNumber); p=headLink; q=headLink->next; while(q) { if(strcmp(q->studentNumber,studentNumber)==0) { p->next=q->next; free(q); flag=1; break; } p=p->next; q=q->next; } if(!flag) { printf("对不起,(°ο°)不存在该学号的学生\n"); return; } printf("成功删除\n"); } /************************************ 函数功能:显示所有学生的信息 ************************************/ void OutputInformation(void) { STUDENT *p; p=headLink->next; if(p==NULL) { printf("现在没有学生信息,请先输入学生信息\n\n"); return; } printf("学号\t姓名\t班级\t学期\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n"); while(p) { DesplayOneNode(p); p=p->next; } } /************************************ 函数功能:根据输入的班级修改成绩 ************************************/ void ChangeMarkByName(void) { STUDENT *p; int a; char studentName[20]; char flag=0; float mark1,mark2,mark3; p=headLink->next; printf("请输入学生班级:"); scanf("%d",&a); printf("请输入学生姓名:"); scanf("%s",studentName); while(p) { if(strcmp(p->studentName,studentName)==0) { printf("请输入新的第1门成绩:"); scanf("%f",&mark1); printf("请输入新的第2门成绩:"); scanf("%f",&mark2); printf("请输入新的第3门成绩:"); scanf("%f",&mark3); p->mark1=mark1; p->mark2=mark2; p->mark3=mark3; flag=1; printf("修改成功\n"); break; } p=p->next; } if(!flag) printf("对不起,不存在班级为 %s 的学生\n",studentName); } /************************************ 函数功能:根据输入的学期修改成绩 ************************************/ void ChangeMarkByNumber(void) { STUDENT *p; int b; char studentNumber[20]; char flag=0; float mark1,mark2,mark3; p=headLink->next; printf("请输入学生所在学期:"); scanf("%d",&b); printf("请输入学生学号:"); scanf("%s",studentNumber); while(p) { if(strcmp(p->studentNumber,studentNumber)==0) { printf("请输入新的第1门(语文)成绩:"); scanf("%f",&mark1); printf("请输入新的第2门(数学)成绩:"); scanf("%f",&mark2); printf("请输入新的第3门(英语)成绩:"); scanf("%f",&mark3); p->mark1=mark1; p->mark2=mark2; p->mark3=mark3; flag=1; printf("修改成功\n"); break; } p=p->next; } if(!flag) printf("对不起,不存在学期为 %s 的学生\n",studentNumber); } /************************************ 函数功能:保存链表数据到文件中 ************************************/ void SaveLinkToFile(void) { STUDENT *p; FILE *fp; p=headLink->next; if(p==NULL) { printf("现在没有学生信息,请先输入学生信息哦\n\n"); return; } fp=fopen("student.txt","w+"); if(!fp) { printf("文件不存在\n"); return; } while(p) { fprintf(fp,"%s %s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->className,p->yearName,p->mark1,p->mark2,p->mark3); p=p->next; } fclose(fp); printf("学生信息保存成功!\n"); } /************************************ 函数功能:不及格学生成绩 ************************************/ void DesplayMarkSegment(void) { STUDENT *p; int count=0; p=headLink->next; printf("60分以下(不及格)的学生成绩如下:\n"); printf("学号\t姓名\t班级\t学期\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n"); while(p) { if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10)))) /*只要有一科不及格就认为该生不及格*/ { count++; DesplayOneNode(p); } p=p->next; } printf("不及格的学生一共有%d人\n",count); } /************************************ 函数功能:按平均成绩排序 ************************************/ void CompositorByTotalMark(void) { STUDENT exchange,*r,*p,*q; r=headLink->next; if(r==NULL) { printf("现在还没学生信息,请先输入学生信息\n"); return; } while(r)/*实现排序*/ { p=r; q=r->next; while(q) { if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3)) { strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/ strcpy(exchange.studentName,q->studentName); strcpy(exchange.className,q->className); exchange.mark1=q->mark1; exchange.mark2=q->mark2; exchange.mark3=q->mark3; strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/ strcpy(q->studentName,p->studentName); strcpy(q->className,p->className); q->mark1=p->mark1; q->mark2=p->mark3; q->mark3=p->mark3; strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/ strcpy(p->studentName,exchange.studentName); strcpy(p->className,exchange.className); p->mark1=exchange.mark1; p->mark2=exchange.mark2; p->mark3=exchange.mark3; } q=q->next; } r=r->next; } OutputInformation(); } </span>
[align=left]读文件操作文件截图:[/align]
运行结果;
1.用户界面登陆
2.管理界面
3.按照班级查找成绩单
4.增添保存学生功能:
5.显示不及格学生成绩
6.显示按照平均成绩从高到低排序
[align=left]设计心得:[/align]
[align=left]三天的课程设计,通过对代码的调试,对整体框架系统的构思,让我受益匪浅,希望自己可以在这次课程设计中找到自己的不足,以后认真对待并且去克服它,多思考,多总结,这样学习才会达到事半功倍的效果。[/align]
[align=left] 2015.12.27[/align]
相关文章推荐
- 数据结构_1:线性表: C语言练习题
- 数据结构_1:线性表: C语言实现
- SDUT 数据结构实验之排序三:bucket sort (无语题)
- 数据结构 queue
- 数据结构
- 数据结构bag
- 【“BattenSnake”数据结构课程设计总结】
- 2-11-一元多项式运算-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构实训 烟台大学导游系统
- 数据结构
- 第十六周--数据结构--项目一-- 插入排序之显示显示插入过程
- 2-10-归并扩展的线性单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构--期末课程设计
- 数据结构 ---- 链表
- Java之美[从菜鸟到高手演变]之数据结构基础之树、二叉树
- 数据结构实践项目之校园导航系统
- 【数据结构】树
- 数据结构——算法之(028)( 寻找当中的一个子字符串个数)
- Linux C 数据结构---线性表
- 理解 OpenStack + Ceph (4):Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]