wordpress实例教程/谷歌广告优化师
《c语言程序课程设计学生成绩管理程序》由会员分享,可在线阅读,更多相关《c语言程序课程设计学生成绩管理程序(17页珍藏版)》请在人人文库网上搜索。
1、武汉科技大学二一二一一学年第一学期信息科学与工程学院课程设计报告书课程名称: C语言课程设计 班 级: 自动化2009级2班 学 号: 姓 名: 指导老师: 二一 年 九 月设计题目:学生成绩管理程序任务:自学C语言中相关知识,设计出学生成绩管理程序。设计要求:l 能录入学生信息存储在文件中,每位学生录入的信息有:姓名、学号、性别、班级、和三门功课(数学、英语、计算机)的成绩;l 能够统计每个学生三门课程的总成绩;l 能按学生学号查询其三门功课成绩并显示;l 能浏览全部学生成绩;l 能按总成绩有高到低显示学生信息。系统功能需求分析:1, 系统要求用户必须输入正确的信息格式;2, 系统应该提供已。
2、经记录在案的信息数目;3, 系统应提供查询、删除、保存、浏览功能;系统总体设计框架:主界面查询学生资料删除学生资料登记学生资料修改学生资料保存浏览全部排序浏览系统功能模块图:1,登记学生资料尽快保存;2,删除学生信息;3,查询学生信息;4,修改学生信息;5,保存学生信息;6,保存资料后浏览全部学生成绩;7,保存资料后按总成绩排名;0, 退出系统。功能模块的算法设计思路:1,增加学生:将指针放在链表尾,开辟一个结构体单元,输入学号,查找是否有重复学号,如无,则写入,再关闭文件。2,查询信息:如果l-next为空,则无信息;按学号查,输入要查的学号,与链表中数据一个一个进行比较,找到所在处,指针指。
3、向,输出信息。无信息则提示。3,删除信息:如果l-next为空,则无信息;按学号删,输入要删的学号,在链表中号码一个一个与所找学号比较,找到后将前一个数据的尾接到后一个的头;4,修改信息:如果l-next为空,则无信息,输入要该的学号,在文件中找到,重新写入各项信息,保存。5,保存:打开一个制定文件,将链表的内容写入文件中,关闭文件。6,浏览:打开文件,找到链表头,逐个输出。7,排序:建立一个新的结构体,将文件中内容复制到新结构体中,用冒泡排序将总成绩排序,输出。工作流程图:主要源程序代码:#include stdio.h #include stdlib.h #include string.h。
4、 int numbercount=0; /* */ struct student char num10;/* 学号 */ char name20; /*姓名*/char sex10;/*性别*/char clas10;/*班级*/int mgrade;/*数学*/int egrade; /*英语*/ int cgrade;/*计算机*/int totle;/*总分*/;typedef struct node struct student data; struct node *next; Node,*Link;void printenglish(Node *p)/* 本函数用于输出英文 */ p。
5、rintf(%-12s%st%st%st%dt%dt%dt%dn,p-data.num,p-data.name,p-data.sex,p-data.clas,p-data.mgrade,p-data.egrade,p-data.cgrade,p-data.totle);void Add(Link l) /* 增加学生信息*/ Node *p,*r,*s; char num10,a10; r=l; /*l为小写L*/s=l-next;while(r-next!=NULL) r=r-next; /* 将指针置于最末尾 */ while(1) printf(请你输入学号:);scanf(%s,num。
6、);for(;s!=NULL;s=s-next) if(strcmp(s-data.num,num)=0) printf(提示:学号为%s的学生已经存在,若要修改请你选择4 修改!n,num); printf(学号 姓名 性别 班级 数学成绩 英语成绩 计算机成绩 总分n);printenglish(s); printf(n); return; p=(Node *)malloc(sizeof(Node);strcpy(p-data.num,num); printf(请你输入姓名:); scanf(%s,p-data.name); getchar(); printf(请你输入性别:);scanf。
7、(%s,p-data.sex);getchar();printf(请你输入班级:);scanf(%s,p-data.clas);getchar(); printf(请你输入计算机成绩:); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入数学成绩:); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入英语成绩:); scanf(%d,&p-data.egrade); getchar(); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade;/。
8、* 信息输入已经完成 */ p-next=NULL; r-next=p; r=p; numbercount=1;printf(是否输入下一个学生信息?按y/n选择n);scanf(%s,a);if(strcmp(a,n)=0) break; /*while(1)结束*/void Qurify( Link l) /* 查询学生信息 */ char findmess20; Node *p,*r;int i=0;if(l-next=NULL) printf(n提示:没有资料可以查询!n); return; printf(请你输入要查找的学号:); scanf(%s,findmess); r=l-ne。
9、xt;p=NULL;while(r!=NULL) if(strcmp(r-data.num,findmess)=0) p=r; r=r-next; if(p) printf(tttt查找结果n); printf(学号 姓名 性别 班级 数学成绩 英语成绩 计算机成绩 总分n);printenglish(p); /*输出英文*/ else printf(n提示:没有找到该学生!n);return; void Delete(Link l) /* 删除 */ int sel; Node *p,*r; char findmess20; if(!l-next) printf(n提示:没有资料可以删除!n。
10、); return; printf(n1按学号删除n2按姓名删除n); scanf(%d,&sel); if(sel=1) printf(请你输入要删除的学号:); scanf(%s,findmess); r=l-next;p=NULL;while(r!=NULL) if(strcmp(r-data.num,findmess)=0) p=r; r=r-next; if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n提示:该学生已经成功删除!n); numbercount=1; else printf(n提示。
11、:没有找到该学生!n); else if(sel=2) printf(请你输入要删除的姓名:); scanf(%s,findmess); r=l-next;p=NULL;while(r!=NULL) if(strcmp(r-data.name,findmess)=0) p=r; r=r-next; if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n提示:该学生已经成功删除!n); numbercount=1; else printf(n提示:没有找到该学生!n); else printf(n提示:输入错误。
12、!n);void Modify(Link l) /*修改学生信息*/ Node *p,*r; char findmess20;if(!l-next) /*l-next为空时*/ printf(n提示:没有资料可以修改!n); return; printf(请你输入要修改的学生学号:); scanf(%s,findmess); r=l-next;p=NULL;while(r!=NULL) if(strcmp(r-data.num,findmess)=0) p=r; r=r-next; if(p) printf(请你输入新学号(原来是%s):,p-data.num); scanf(%s,p-dat。
13、a.num);printf(请你输入新姓名(原来是%s):,p-data.name);scanf(%s,p-data.name); getchar();printf(请你输入新性别(原来是%s):,p-data.sex);scanf(%s,p-data.sex);getchar();printf(请你输入新班级(原来是%s):,p-data.clas);scanf(%s,p-data.clas);getchar();printf(请你输入新的数学成绩(原来是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade); getchar();printf(请你输入。
14、新的英语成绩(原来是%d分):,p-data.egrade); scanf(%d,&p-data.egrade); getchar();printf(请你输入新的计算机成绩(原来是%d分):,p-data.cgrade); scanf(%d,&p-data.cgrade);getchar();p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; /*总成绩*/printf(n=提示:资料修改成功!n); numbercount=1; else printf(n提示:没有找到该学生!n);void Save(Link l) /*保存到文件。
15、*/ FILE * fp; Node *p; int flag=1,count=0; fp=fopen(c:student,wb); if(fp=NULL) printf(n提示:重新打开文件时发生错误!n); exit(0); p=l-next;while(p) if(fwrite(p,sizeof(Node),1,fp)=1) /*写入*/ p=p-next; count+; else flag=0; break; if(flag=1) printf(n提示:文件保存成功.(有%d条记录已经保存.)n,count); numbercount=0; fclose(fp);void Skim(。
16、Link l,int amount) /*浏览全部成绩*/ int i;FILE * fp; Node *p,*r;fp=fopen(C:student,rb);printf(学号 姓名 性别 班级 数学成绩 英语成绩 计算机成绩 总分n);r=l;p=l-next;for(i=1;inext;fclose(fp); void Sort(Link l,int amount)/*按总成绩排序*/struct personchar num10;/* 学号 */ char name20; /*姓名*/char sex10;/*性别*/char clas10;/*班级*/int mgrade;/*数学。
17、*/int egrade; /*英语*/ int cgrade;/*计算机*/int totle;/*总分*/;struct person cop100;/*这个地方有局限性,只能从文件中复制100个到新定义的结构体中*/int i,t,j;char num110,name120,sex110,clas110;FILE* fp; Node *p;fp=fopen(c:student,rb); /*打开文件*/if(fp=NULL) printf(n提示:重新打开文件时发生错误!n); return; p=l-next;for(i=1;inext=NULL; r=l;fp=fopen(C:stu。
18、dent,rb); /*打开文件,只读*/if(fp=NULL) printf(n提示:文件还不存在,请创建?输入y确认n); scanf(%c,&chuang); fp=fopen(C:student,wb); /*打开文件,只写形式*/ printf(n提示:文件已经打开,正在导入记录.n);while(!feof(fp) /*文件没结束则feof(fp)为0*/ p=(Node*)malloc(sizeof(Node); /*创建内存区,地址给p*/if(fread(p,sizeof(Node),1,fp) /* 将文件的内容放入接点中 */ p-next=NULL; r-next=p;。
19、 r=p; /* 将该接点挂入连中 */ count+; fclose(fp); /* 关闭文件 */ printf(n=提示:记录导入完毕,共导入%d条记录.n,count);for(;) printf(*n); printf(t1登记学生资料尽快保存n);printf(t2删除学生资料n);printf(t3查询学生资料n);printf(t4修改学生资料n);printf(t5保存学生资料n); printf(t6保存资料后浏览全部学生成绩n);printf(t7保存资料后按总成绩排名n);printf(t0退出系统n);printf(*n); printf(请你选择操作:); scan。
20、f(%d,&n);if(n=0) if(numbercount=1) getchar(); printf(n=提示:资料已经改动,是否将改动保存到文件中(y/n)?n); scanf(%c,&ch); if(ch=y|ch=Y) Save(l); /*保存*/ printf(n=提示:你已经退出系统,再见!n); break; if(n=1) Add(l);continue; /* 增加学生 */ if(n=2) Delete(l);continue;/* 删除学生 */ if(n=3) Qurify(l);continue;/* 查询学生 */ if(n=4) Modify(l);conti。
21、nue;/* 修改学生 */ if(n=5) Save(l);continue;/* 保存学生 */ if(n=6) Skim(l,count);continue;/*浏览全部学生成绩*/if(n=7) Sort(l,count);continue;printf(n提示:无此项目!n);break; 调试分析过程描述:测试数据:测试输出结果:主界面:排序:浏览:调试过程问题:1,在输入学生信息时,如果格式输入错误,系统无法识别;2, 输入信息后保存,浏览和排序无法显示刚录入的信息,退出后重新运行,又可以。可能是指针没有指到新信息地址;课程设计小结:在此次课程设计中,我体会到要写好c语言程序,首先要思路明确设计好算法,函数与主程序应分工明确,便于修改。仔细分析,想好各种可能情况,才能减少漏洞。我建议老师能帮我们解答一下课程设计中遇到的困难和疑惑。