收藏 分销(赏)

C语言课程设计学生成绩管理系统.doc

上传人:天**** 文档编号:10522782 上传时间:2025-06-01 格式:DOC 页数:29 大小:148.46KB
下载 相关 举报
C语言课程设计学生成绩管理系统.doc_第1页
第1页 / 共29页
C语言课程设计学生成绩管理系统.doc_第2页
第2页 / 共29页
点击查看更多>>
资源描述
C语言课程设计报告 信息技术工程学院 C语言课程设计报告 题目:学生成绩管理系统(student achievement management system) 目录 一 设计目的 3 二 课程设计的内容 3 三 课程设计的要求与数据 4 四 课程设计应完成的工作 4 五 总体设计(包含几大功能模块) 5 六 详细设计 6 6.1各个模块的功能和实现 6 6.2 流程图 7 (管理员模式流程图) 7 (来宾模式流程图) 8 8 七 调试分析(各模块测试结果) 9 7.1源代码 9 7.2 各模块测试结果 24 八 总结 29 九 参考资料 30 一 设计目的 通过本课程设计巩固《C语言程序设计》课程的教学成果,深入理解结构体、指针、链表、动态分配内存和文件操作的等C程序设计中的中高级技术,通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力、提高学生利用C语言进行程序设计的能力,初步培养良好的编程习惯和编程风格,初步学习程序的文档的撰写方法。 二 课程设计的内容 通过C语言程序系统,设计一个可以对学生的成绩信息进行管理的程序,其中学生的信息可以包括:学号、各科目的成绩的平均分排序等,其功能可以包括学生成绩的输入、输出、查询、排序、删除、统计、退出等。 三 课程设计的要求与数据 1、用C语言实现系统; 2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出、显示,以及整个程序的切换登录模式和修改管理员的信息. 3、学生信息包括: (1)、每一条记录包括一个学生的学号、姓名、3门课成绩 (2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。) (3)、成绩信息显示浏览功能:完成全部学生记录的显示。 (4)、查询功能:完成按姓名查找学生记录,并显示。 (5)、成绩信息的删除:按学号进行删除某学生的成绩. (6)、排序功能:按学生平均成绩进行排序。 (7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观! 四 课程设计应完成的工作 (1)编写算法; (2)算法测试,并有具体的测试结果和结果分析; (3)撰写课程设计报告。内容包括: 1) 封面扉页 2) 设计任务书 3) 目录 4) 总体设计方案(包括流程图) 5) 使用说明及运行实例(包括界面) 6) 成员设计内容简介 7) 项目源程序代码(注意注释的使用) 8) 指导教师评语 五 总体设计(包含几大功能模块) 1、成绩录入功能 2、成绩输出功能 3、成绩查询功能 4、删除模块 5、排序功能 6、统计功能 7、退出系统 六 详细设计 6.1各个模块的功能和实现 (1)整个成绩管理系统设计分为9个模块: 1.输入学生成绩 2.删除学生成绩 3.查询学生成绩 4.修改学生成绩 5.排序学生成绩 6.保存记录 7.显示所有 8.退出系统 9.修改管理员信息 (2)(主要函数的功能) 1.主函数main():定义学生结构体数组,调用录入,统计等函数对成绩表进行处理。 2.输入数据函数input():输入学号、成绩。 3.排序函数sort():对总成绩或者平均成绩,进行排序,按从高到低或者从低到高。 4.显示数据函数display():显示各个学生的总成绩 5.新增数据函数insert():增加学生学生记录。 6.删除数据函数del():由于各种原因,删除某些同学的成绩、学号等。 7.平均值函数average():求各个同学总成绩的平均值。 8.查询数据函数qur():查询学生的信息。 9.保存数据函数save():再一次打开界面是,仍有上次所找的讯息。 10.退出系统函数exit():当要退出整个系统时。 6.2 流程图 (管理员模式流程图) 输出菜单 输入 根据菜单输入n的值选择程序 结束 开始 保存 查找 退出 删除 统计 插入 排序 输出 开始 (来宾模式流程图) 输出菜单 根据菜单, 选择程序 退出程序 切换登录 排序 成绩 显示 成绩 查询 成绩 结束 七 调试分析(各模块测试结果) 7.1源代码 #include<stdio.h> #include<string.h> #include<time.h> #include<stdlib.h> #include<conio.h> #define HEADER2 " 学号 姓名 数学 英语 C语言 总分 平均分\n" #define FORMAT " %s %s %d %d %d %d %.2f\n" #define DATA p->data.num,p->data.name,p->data.mgrade,p->data.egrade,p->data.cgrade,p->data.total,p->data.ave int saveflag=0; typedef unsigned short WORD; struct student{ char num[10]; char name[15]; int mgrade; int egrade; int cgrade; int total; float ave; }; typedef struct node{ struct student data; struct node *next; }Node,*Link; void menu(){ time_t now; now=time(NULL); printf(" 学生成绩管理系统 \n"); printf("\n"); printf(" *******************************************************************\n"); printf(" * *\n"); printf(" * 1 输入成绩 2 删除成绩 *\n"); printf(" * *\n"); printf(" * 3 查询成绩 4 修改成绩 *\n"); printf(" * *\n"); printf(" * 5 排序成绩 6 保存记录 *\n"); printf(" * *\n"); printf(" * 7 显示所有 0 退出系统 *\n"); printf(" * *\n"); printf(" *******************************************************************\n"); printf(" * 8 切换登录模式 9 修改管理员信息 *\n"); printf(" *******************************************************************\n"); printf("\n 请你选择操作命令前的的数字(0~9):"); } int menu2(){ //int select; time_t now; now=time(NULL); system("cls"); //清屏 printf("\n 学生模式\n\n\n"); printf(" 学生成绩管理系统 \n"); printf("\n"); printf(" *******************************************************************\n"); printf(" * *\n"); printf(" * 1 查询成绩 2 排序成绩 *\n"); printf(" * *\n"); printf(" * 3 显示所有 0 退出系统 *\n"); printf(" * *\n"); printf(" *******************************************************************\n"); printf(" * 4 切换登录模式 *\n"); printf(" *******************************************************************\n"); printf("\n 请你选择操作命令前的数字(0~4):"); return 0; } void printheader() { printf(HEADER2); } void printdata(Node *pp){ Node *p; p=pp; printf(FORMAT,DATA); } void Wrong(){ printf("\n\n\n\n************错误:输入不合法!!!*********\a\n"); getch(); } void Nofind(){ printf("\n没有该学生!!\n"); } Node* locate(Link l,char findmess[],char nameornum[]) { Node *r; if(strcmp(nameornum,"num")==0) { r=l->next; while(r) { if(strcmp(r->data.num,findmess)==0) return r; r=r->next; } } else if(strcmp(nameornum,"name")==0) { r=l->next; while(r) { if(strcmp(r->data.name,findmess)==0) return r; r=r->next; } } return 0; } void stringinput(char*t,int lens,char*notice) { char n[225]; do { printf(notice); scanf("%s",n); if(strlen(n)>lens) printf("\n超出宽度!!!\n"); }while(strlen(n)>lens); strcpy(t,n); } int numberinput(char *notice) {int t=0; do { printf(notice); scanf("%d",&t); if(t>100||t<0) printf("\n 分数必须在0~100之间!!!\n"); }while(t>100||t<0); return t; } void Disp(Link l){ Node *p; system("cls"); p=l->next; if(!p) { printf("\n目前无学生成绩记录!!\n"); getch(); return; } printf("\n\n"); printheader(); while(p) { printdata(p); p=p->next;//移至下一个结点 } } void Add(Link l){ //printf("增加学生记录模块\n"); //system("PAUSE");} Node *p,*r,*s; char ch,flag=0,num[10]; r=l; system("cls"); Disp(l);//先打印已有的学生信息 while(r->next!=NULL) r=r->next;//将只指针移至链表末尾,准备添加记录 while(1)//一次可输入条记录,直至输入的学号我0的记录节点添加操作 { s=l->next; while(1) { stringinput(num,10,"学号(按0退出):"); flag=0; if(strcmp(num,"0")==0) return; s=l->next; while(s)//查询学号是否存在,若存在则要求重新输入 { if(strcmp(s->data.num,num)==0) { flag=1; break; } s=s->next; } if(flag==1)//提示用户是否重新输入 { getchar(); printf("=====>学号%s已存在,是否重新输入?(y/n)\a:",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') continue; else return ; } else break; } p=(Node *)malloc(sizeof(Node)); strcpy(p->data.num,num);//将字符串mun拷贝到p->data.num中 stringinput(p->data.name,15,"name:"); p->data.cgrade=numberinput("c语言[0-100]:"); p->data.mgrade=numberinput("数学[0-100]:"); p->data.egrade=numberinput("英语[0-100]:"); p->data.total=p->data.cgrade+p->data.mgrade+p->data.egrade; p->data.ave=(float)(p->data.total/3); p->next=NULL; while(r->next!=NULL) r=r->next; r->next=p; saveflag=1; } } void Del(Link l){ // printf("删除学生记录模块\n"); //system("PAUSE"); int sel; Node *p,*r; char findmess[20]; if(!l->next) { system("cls"); printf("\n======>暂无学生记录!!\n"); getch(); return; } system("cls"); Disp(l); printf("\n 1通过学号删除 2通过姓名删除\n"); printf(" 请选择[1,2]"); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"请输入学号:"); p=locate(l,findmess,"num"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p);//释放内存空间 printf("\n删除成功!\n"); saveflag=1; } else Nofind(); } else if(sel==2) { stringinput(findmess,15,"请输入学生姓名:"); p=locate(l,findmess,"name"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf("\n删除成功!!\n"); saveflag=1; } else Nofind(); } else Wrong(); getch(); } void Qur(Link l){ int select; char searchinput[20]; Node *p; system("cls"); if(!l->next) { printf("\n暂无学生记录!!\n"); return; } printf("\n=======>1通过学号查找 =======>2通过姓名查找\n"); printf("请选择[1~2]:"); scanf("%d",&select); if(select==1) { stringinput(searchinput,10,"请输入要查找的学号:"); p=locate(l,searchinput,"num"); if(p) {printheader(); printdata(p); } else Nofind(); } else if(select==2) { stringinput(searchinput,15,"请输入学生姓名:"); p=locate(l,searchinput,"name"); if(p) { printheader(); printdata(p); } else Nofind(); } else Wrong(); system("PAUSE"); } void Modify(Link l){ Node *p; char findmess[20]; if(!l->next) { system("cls"); printf("\n没有该学生记录!\n"); getch(); return; } system("cls"); printf("修改学生记录"); Disp(l); stringinput(findmess,10,"请输入学号:"); p=locate(l,findmess,"num"); if(p) { printf("学号:%s,\n",p->data.num); printf("姓名:%s,",p->data.name); stringinput(p->data.name,15,"输入新的姓名:"); printf("c语言:%d,",p->data.cgrade); p->data.cgrade=numberinput("c语言[0~100]:"); printf("数学:%d,",p->data.mgrade); p->data.mgrade=numberinput("数学[0~100]:"); printf("英语:%d,",p->data.egrade); p->data.egrade=numberinput("英语[0~100]:"); p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=(float)(p->data.total)/3; printf("\n===>修改成功!"); saveflag=1; } else Nofind(); getch(); } void Sort(Link l){ Link ll; Node *p,*rr,*s; int i=0; system("cls"); if(l->next==NULL) { printf("\n暂无学生记录!\n"); return; } ll=(Node*)malloc(sizeof(Node));//用于创建新的节点 ll->next=NULL; printf("当前状态:\n"); Disp(l); system("PAUSE"); p=l->next; while(p) { s=(Node*)malloc(sizeof(Node)); s->data=p->data; s->next=NULL; rr=ll; while(rr->next!=NULL &&rr->next->data.total>=p->data.total) { rr=rr->next; } if(rr->next==NULL) rr->next=s; else { s->next=rr->next; rr->next=s; } p=p->next; } l->next=ll->next; p=l->next; while(p!=NULL) { i++; p=p->next; } printf("\n******************************\n"); Disp(l); saveflag=1; printf("\n ******排序完成******* \n"); system("PAUSE"); } void Save(Link l){ //printf("保存模块\n"); //system("PAUSE"); FILE *fp; Node *p; int count=0; fp=fopen("student.txt","wb"); p=l->next; while(p) { if(fwrite(p,sizeof(Node),1,fp)==1) { p=p->next; count++; } else break; } if(count>0) { printf("\n\n\n\n\n 保存完毕,当前共有%d名学生记录\n",count); saveflag=0; } else printf("空文件,保存失败!!\n"); fclose(fp);//关闭文件 getch(); } int login() { FILE *fp1,*fp2; int state; char str1[20],str2[20],str_z[20],str_m[7]; if((fp1=fopen("admin.txt","rb"))==NULL) { printf("本系统无管理员,请创建!\n\n请输入管理员账号:"); scanf("%s",str_z); printf("请设置一个六位数密码:"); fp2=fopen("admin.txt","wb"); fprintf(fp2,"%s%c",str_z,'\n'); fprintf(fp2,"%s%c",str_m,' '); fclose(fp2); } fp1=fopen("admin.txt","rb"); fscanf(fp1,"%s",str1); fscanf(fp1,"%s",str2); fclose(fp1); while(1) { printf("请选择你的登录方式:\n\n"); printf("1.管理员模式 0.来宾模式\n"); printf("请选择:(0~1)"); scanf("%d",&state); if(state==0) return 0; else if(state==1) { printf("请输入账号:"); scanf("%s",str_z); if (strcmp(str1,str_z)==0&&strcmp(str2,str_m)==0) return 1; else { printf("账号或密码错误!!!\a\n"); system("PAUSE"); system("cls"); } } else { printf("输入不合法!!!\a\n"); exit(0); } } } void Modify_admin() { FILE *fp; char str_z[20],str_m[7]=""; fp=fopen("admin.txt","wb"); printf("请输入管理员账号:"); scanf("%s",str_z,'\n'); printf("请输入密码:"); fprintf(fp,"%s%c",str_z,'\n'); fprintf(fp,"%s%c",str_m,' '); fclose(fp); printf("管理员信息更新完毕!! \a\n"); getch(); } int main() { Link L; FILE *fp; int select,State=0; char ch,admin[20],admin_p[20]; int count=0; Node *p,*r; system("color 0A"); L=(Node*)malloc(sizeof(Node)); L->next=NULL; r=L; fp=fopen("student.txt","ab+"); Loop:{ State=login(); } while(!feof(fp)) {p=(Node*)malloc(sizeof(Node)); if(fread(p,sizeof(Node),1,fp)==1) { p->next=NULL; r->next=p; r=p; count++; } } fclose(fp); if(State==1) { while(1) { system("cls"); printf("\n 管理员模式\n\n"); menu(); p=r; scanf("%d",&select); if(select==0) { if(saveflag==1) { getchar(); printf("\n记录已修改,是否保存当时记录?(y/n):"); scanf("%c",&ch); if(ch=='y'||ch=='Y') Save(L); } printf("谢谢您的使用!!!\n"); break; } switch(select) { case 1:Add(L);break;//增加模块 case 2:Del(L);break;//删除记录 case 3:Qur(L);break;//查询模块 case 4:Modify(L);break;//修改模块 case 5:Sort(L);break;//排序模块 case 6:Save(L);break;//保存成绩 case 7:Disp(L);system("PAUSE");break;//显示成绩 case 8:system("cls");goto Loop; case 9:Modify_admin();break; default:Wrong();getch();break; } } } else { while(1) { system("cls"); menu2(); scanf("%d",&select); if(select==0) { printf("谢谢您的使用!!\n"); exit(1); } switch(select) { case 1:Qur(L);break; case 2:Sort(L);break; case 3:Disp(L);system("PAUSE");break; case 4:system("cls");goto Loop; default:Wrong();getch();break; } } } return 0; } 7.2 各模块测试结果 创建管理员模块 主界面模块 输入成绩模块 删除成绩模块 查询成绩模块 修改成绩模块 排序成绩模块 保存记录模块 切换登陆模式 修改管理员信息 退出系统 八 总结 本次的课程设计已接近尾声,经过两周的课程设计的学习,让我从中收获了许多的东西,课程开始,由于许多东西的在大一学习C语言时理解不深入,在此次设计中遇到许许多多的问题,调试分析时会出现各种各样的错误,也就需要自己查阅更多的资料。通过查资料,修改源代码,调试分析,再到逐步完善的过程,似乎每一次的实验结果的成功,我都把它当做是一次成长。 回想起这两周的课程学习,让我真正体会到了理论与实践相结合的重要性,从拿到一个设计题目,再到对题目的构思、画流程图,到最后的编写源代码、调试分析、逐步完善、最后的整个程序的完成,看似一个很简单的过程,但是对于一个初次接触的我来说,每次似乎都是遇到了一个大困难。但是越是遇到困难,就越有解决问题的决心,每当遇到问题时,我都会及时的向老师、同学、还有图书馆的相关书籍寻求帮助。努力做到问题的及时解决。 通过这次课程设计收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服