C语言专业课程设计学生成绩标准管理系统.docx
《C语言专业课程设计学生成绩标准管理系统.docx》由会员分享,可在线阅读,更多相关《C语言专业课程设计学生成绩标准管理系统.docx(36页珍藏版)》请在咨信网上搜索。
信息技术工程学院 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语言时了解不深入,在此次设计中碰到许很多多问题,调试分析时会出现多种多样错误,也就需要自己查阅更多资料。经过查资料,修改源代码,调试分析,再到逐步完善过程,似乎每一次试验结果成功,我全部把它当做是一次成长。 回想起这两周课程学习,让我真正体会到了理论和实践相结合关键性,从拿到一个设计题目,再到对题目标构思、画步骤图,到最终编写源代码、调试分析、逐步完善、最终整个程序完成,看似一个很简单过程,不过对于一个首次接触我来说,每次似乎全部是碰到了一个大困难。不过越是碰到困难,就越有处理问题决心,每当碰到问题时,我全部会立即向老师、同学、还有图书馆相关书籍寻求帮助。努力做到问题立即处理。 经过这次课程设计收获知识,提升能力同时,我也学到了大家生哲理,知道怎么样去制订计划,怎么样去实现这个计划,并掌握了在实施过程中怎么样去克服心理上不良情绪。所以在以后生活和学习过程中,我一定会把课程设计精神带到生活中,不畏艰苦,勇往直前使我对C语言有了更深入认识- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 专业课程 设计 学生 成绩 标准 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文