c语言程序课程设计-学生成绩管理程序.doc_第1页
c语言程序课程设计-学生成绩管理程序.doc_第2页
c语言程序课程设计-学生成绩管理程序.doc_第3页
c语言程序课程设计-学生成绩管理程序.doc_第4页
c语言程序课程设计-学生成绩管理程序.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉科技大学二一二一一学年第一学期信息科学与工程学院课程设计报告书课程名称: c语言课程设计 班 级: 自动化2009级2班 学 号: 姓 名: 指导老师: 二一 年 九 月设计题目:学生成绩管理程序任务:自学c语言中相关知识,设计出学生成绩管理程序。设计要求:l 能录入学生信息存储在文件中,每位学生录入的信息有:姓名、学号、性别、班级、和三门功课(数学、英语、计算机)的成绩;l 能够统计每个学生三门课程的总成绩;l 能按学生学号查询其三门功课成绩并显示;l 能浏览全部学生成绩;l 能按总成绩有高到低显示学生信息。系统功能需求分析:1, 系统要求用户必须输入正确的信息格式;2, 系统应该提供已经记录在案的信息数目;3, 系统应提供查询、删除、保存、浏览功能;系统总体设计框架:主界面查询学生资料删除学生资料登记学生资料修改学生资料保存浏览全部排序浏览系统功能模块图:1,登记学生资料尽快保存; 2,删除学生信息;3,查询学生信息;4,修改学生信息;5,保存学生信息;6,保存资料后浏览全部学生成绩;7,保存资料后按总成绩排名;0, 退出系统。功能模块的算法设计思路:1,增加学生:将指针放在链表尾,开辟一个结构体单元,输入学号,查找是否有重复学号,如无,则写入,再关闭文件。2,查询信息:如果l-next为空,则无信息;按学号查,输入要查的学号,与链表中数据一个一个进行比较,找到所在处,指针指向,输出信息。无信息则提示。3,删除信息:如果l-next为空,则无信息;按学号删,输入要删的学号,在链表中号码一个一个与所找学号比较,找到后将前一个数据的尾接到后一个的头;4,修改信息:如果l-next为空,则无信息,输入要该的学号,在文件中找到,重新写入各项信息,保存。5,保存:打开一个制定文件,将链表的内容写入文件中,关闭文件。6,浏览:打开文件,找到链表头,逐个输出。7,排序:建立一个新的结构体,将文件中内容复制到新结构体中,用冒泡排序将总成绩排序,输出。工作流程图: 主要源程序代码:#include stdio.h #include stdlib.h #include string.h 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)/* 本函数用于输出英文 */ printf(%-12s%st%st%st%dt%dt%dt%dn,p-data.num,,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); 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,); getchar(); printf(请你输入性别:); scanf(%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; /* 信息输入已经完成 */ 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-next; 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); 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提示:没有找到该学生!n); else if(sel=2) printf(请你输入要删除的姓名:); scanf(%s,findmess); r=l-next; p=null; while(r!=null) if(strcmp(,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提示:输入错误!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-data.num); printf(请你输入新姓名(原来是%s):,); scanf(%s,); 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(请你输入新的英语成绩(原来是%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) /*保存到文件*/ 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(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 person char num10;/* 学号 */ char name20; /*姓名*/ char sex10;/*性别*/ char clas10;/*班级*/ int mgrade;/*数学*/ 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;i=amount;i+)/*将文件中的内容复制到新结构体中*/ fread(&copi,sizeof(node),1,fp); printf(学号 姓名 性别 班级 数学成绩 英语成绩 计算机成绩 总分n); for(t=1;tamount;t+) for(i=t+1;i=amount;i+) if(copt.totlecopi.totle) j=copt.totle;copt.totle=copi.totle;copi.totle=j; j=copt.mgrade;copt.mgrade=copi.mgrade;copi.mgrade=j; j=copt.cgrade;copt.cgrade=copi.cgrade;copi.cgrade=j; j=copt.egrade;copt.egrade=copi.egrade;copi.egrade=j; strcpy(num1,copt.num);strcpy(copt.num,copi.num);strcpy(copi.num,num1); strcpy(name1,);strcpy(,);strcpy(,name1); strcpy(sex1,copt.sex);strcpy(copt.sex,copi.sex);strcpy(copi.sex,sex1); strcpy(clas1,copt.clas);strcpy(copt.clas,copi.clas);strcpy(copi.clas,clas1); for(t=1;tnext=null; r=l; fp=fopen(c:student,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; 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);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论