欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    C语言程序设计-成绩管理系统程序设计实验报告.doc

    • 资源ID:3295139       资源大小:402.03KB        全文页数:34页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计-成绩管理系统程序设计实验报告.doc

    北京航空航天大学北海学院实验报告学 院: 软件与信息工程学院 专业班级: 软件工程3班 课 程:学生成绩管理系统程序设计实践 指导老师: 学号及姓名:一实验目的:² 通过课程设计,提高自己动手的能力,让实践和理论相结合,进一步巩固语言程序设计的课程内容,掌握工程软件的基本设计方法。² 学会将知识应用于实践,提高分析和解决问题的能力,加强综合能力。² 为以后计算机的学习打下坚实的基础,有利于毕业时做毕业设计。二实验内容:² 运用结构体和共用体,以及单链表和循环的知识点编辑一个简单的学生基本信息管理系统,使之能够完成学生基本信息的录入、修改、插入、查询、排序、打印、退出操作。² 执行编译操作,并根据提示调试此程序,排除所有的错误和警告。直到编译成功为止。² 执行运行操作,直到全部程序能够运行成功为止。² 做完后请老师检查,并能回答老师所提的相关问题。三. 需求分析:1. 该学生信息管理系统能够完成基本的信息处理,如录入,保存,读取,输出,修改,删除,添加,统计,排序等项目操作。实现统计用户的总分和平均分。能够查看单个用户的各科成绩2. 每个模块的功能如下:a) 录入模块:可先后输入学号,姓名,高数成绩,计算机成绩,英语成绩;b) 保存模块:用于数据存盘处理,如果用户没有专门进行此操作且对数 据有修改,在退出时系统会提示用户存盘。c) 查询模块:用于按编号或姓名来查询用户记录d) 输出模块:可输出读取的学生信息与平均成绩;e) 修改模块: 用于修改用户记录。先按输入的编号查询到该记录,然后提示用户修改编号之外的值,但是编号不能修改;f) 删除模块:可删除所读取的学生信息;g) 插入模块:用于插入记录。即按编号查询到要插入的结点的位置,然后在该编号之后插入一个新结点;h) 排序模块:利用插入排序实现单链表的按总分字段的降序排序,格式是从高到低;i) 统计模块:用于分别统计该班的总分第一名和单科第一及各科不及格的人数;j) 退出模块:可直接退出学生信息管理系统; 该学生信息管理系统是在VC+的环境下运行的。该信息系统要测试的数据如下:Ø 录入模块:学号 姓名 高数 英语 计算机 1 XXX 99 80 99 2 XXX 99 89 89 3 XX 67 70 58 4 XXX 78 67 78 Ø 保存模块:输入文件名即可保存于该文件;Ø 查询模块:输入相应的文件名可调出相应的学生信息;Ø 输出模块:可输出录入,修改,删除,添加后的学生信息;Ø 修改模块: 修改信息( 3 XX 67 70 58 )Ø 删除模块:删除信息( 2 XX 99 89 89)Ø 添加模块:添加信息(5 XXX 78 87 89) Ø 排序模块:按平均成绩由小到大排列并输出,如下:学号 姓名 高数 英语 计算机 平均成绩 3 XX 67 70 58 65.000000 4 xxx 78 67 78 74.000000 5 XXX 78 87 89 84.000000 1 xxx 99 80 99 92.000000Ø 统计模块:统计该班的总分第一名和单科第一及各科不及格的人数,如下:Ø 退出模块:输入 0 即可退出系统;四 . 概要设计:ü 主函数结构图:ü录 入插 入输 出修 改删 除保 存排 序退 出删 除统 计ü 模块功能详细说明;A. 录入模块: 录入基本信息;B. 保存模块:输入文件名即可保存于该文件;C. 读取模块:输入相应的文件名可调出相应的学生信息;D. 输出模块:可输出录入,修改,删除,添加后的学生 信息;E. 修改模块: 修改学生信息;F. 删除模块:只要输入要删除的学生学号,就可删除该学生的有关信息,以后输出时就不再显示该学生的信息;G. 添加模块:添加学生信息;H. 统计(排序)模块:按平均成绩由小到大排列并输出;I. 退出模块:推出系统;五、详细设计及运行结果流程图, 函数之间相互调用的图示 ,程序设计及编码, 运行结果。 各模块的程序控制图:保 存 模 块保存基本信息并输入保存的文件名结 束YN录 入 模 块是 否 继 续 录 入录入基本信息结 束YN读 取 模 块是 否 读 取输入保存的文件名,即可结 束YN查 询 模 块输出所录入的学生成绩信息结 束修 改 模 块是 否 修 改输入要修改的学号结 束YN英语数学平均成绩C语言姓名删 除 模 块输入删除学号结 束YN是 否 删 除添 加 模 块是 否 继 续 添 加输入添加信息结 束YN统 计 模 块按学生成绩由低到高排列结 束 函数之间相互调用的图示:主函数调 用 录 入函 数调 用 保 存 函 数调 用 查 询 函 数调 用 修 改 函 数调 用 删 除 函 数 调用输出函数结束结束结束结束结束调 用 排 序 函 数 结束调 用 读 取 模 块调 用 保 存 函 数调 用 保 存 函 数调 用 添 加 函 数调 用 保 存 函 数调 用 查 找 函 数结束结束调用输出函数、(3)各模块流程图 结 束 Y否开 始head->next=NULL;p2=head;继续输入(Y/N)? p2->next=p1;p2=p1;NY录入模块输入学生成绩信息 return head返回return headp->next=head->next;head->next=p;真q=q->nextq->next!=NULL开始输入新增学生信息申请结点p=headhead=NULL假假查询学生信息:真假真Flag!=0Head=NULL无学生信息开始退出按学号查询按姓名查询2Number=2Number=1Number=0Switch(number)开始p1=head输入学生学号xx!=p1->num&&p1->next!=NULLp1=p1->next返回主菜单输出无信息输出学生信息x=p1->num真真学生信息的删除:NN无此学生信息输出学生总人数sum-p2->next=p1->next;free(p1)head=p1->next;free(p1)p1=headYnumber=p1->numNP2=p1;p1=p1->nextY开始输入要删除学生的学号numberhead=NULLNp1=headNumber!=p1->num&&p1->next!=NULL 测试与行结果A录入模块:B删除模块:C查询模块:D修改模块:E插入模块:F统计模块:G排序模块:H保存模块:源代码:/*对用户的有效信息进行输入、排序等操作实现统计用户的总分和平均分能够查看单个用户的各科成绩*/#include "stdio.h" /*标准输入输出函数库*/#include "stdlib.h" /*标准函数库*/#include "string.h" /*字符串函数库*/#include "conio.h" /*屏幕操作函数库*/#define HEADER1 " (#) -STUDENT-(°°) n"#define HEADER4 " W E L C O M E B A B Y ! n"#define HEADER2 " | number | name |Eng|Math|Comp | sum | ave |mici | n"#define HEADER3 " |-|-|-|-|-|-|-|-| "#define FORMAT " | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |%4d |n"#define DATA p->data.num,p->data.name,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci#define END " - n"int saveflag=0; /*是否需要存盘的标志变量*/*定义与学生有关的数据结构*/typedef struct student /*标记为student*/char num10; /*学号*/char name15; /*姓名*/int cgrade; /*C语言成绩*/int mgrade; /*数学成绩*/int egrade; /*英语成绩*/int total; /*总分*/float ave; /*平均分*/int mingci; /*名次*/;/*定义每条记录或结点的数据结构,标记为:node*/typedef struct nodestruct student data; /*数据域*/struct node *next; /*指针域*/Node,*Link; /*Node为node类型的结构变量,*Link为node类型的指针变量*/void menu() /*主菜单*/system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/ /*在文本模式中选择新的字符颜色*/ /*在文本窗口中设置光标*/printf(" The Students' Grade Management System nn");printf(" *_ 为您服务是俺的荣幸!_* nn");printf(" _ 菜单_ nnn");printf(" * 1 input (>_<) 2 delete (*) *nn");printf(" * 3 search () 4 modify w_w *nn");printf(" * 5 insert ( >O< ) 6 count (+_+) *nn");printf(" * 7 sort ( ) 8 save _ *nn");printf(" * 9 display (#) 0 quit ( _ _ ) *nn");printf(" nnn");/*cprintf()送格式化输出至文本窗口屏幕中*/void printheader() /*格式化输出表头*/ printf(HEADER1); printf(HEADER4); printf(HEADER2); printf(HEADER3);void printdata(Node *pp) /*格式化输出表中数据*/ Node* p; p=pp; printf(FORMAT,DATA);void Wrong() /*输出按键错误信息*/printf("nnnnn*Error:input has wrong! press any key to continue*n");getchar();void Nofind() /*输出未查找此学生的信息*/printf("n=> Not find this student!n");void Disp(Link l) /*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/Node *p;p=l->next; /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/if(!p) /*p=NULL,NUll在stdlib中定义为*/ printf("n= Not student record!n"); getchar(); return;printf("nn");printheader(); /*输出表格头部*/while(p) /*逐条输出链表中存储的学生信息*/ printdata(p); p=p->next; /*移动至下一个结点*/ printf(HEADER3);getchar();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) /*若找到findmess值的学号*/ return r; r=r->next; else if(strcmp(nameornum,"name")=0) /*按姓名查询*/ r=l->next; while(r) if(strcmp(r->data.name,findmess)=0) /*若找到findmess值的学生姓名*/ return r; r=r->next; return 0; /*若未找到,返回一个空指针*/*输入字符串,并进行长度验证(长度<lens)*/void stringinput(char *t,int lens,char *notice) char n255; do printf(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>lens)printf("n exceed the required length! n"); /*进行长度校验,超过lens值重新输入*/ while(strlen(n)>lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/*输入分数,<分数<)*/int numberinput(char *notice) int t=0; do printf(notice); /*显示提示信息*/ scanf("%d",&t); /*输入分数*/ if(t>100 | t<0) printf("n score must in 0,100! n"); /*进行分数校验*/ while(t>100 | t<0); return t; /*增加学生记录*/void Add(Link l)Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/char ch,flag=0,num10;r=l;s=l->next;system("cls");Disp(l); /*先打印出已有的学生信息*/while(r->next!=NULL) r=r->next; /*将指针移至于链表最末尾,准备添加记录*/while(1) /*一次可输入多条记录,直至输入学号为的记录结点添加操作*/ while(1) /*输入学号,保证该学号没有被使用,若输入学号为,则退出添加记录操作*/ stringinput(num,10,"input number(press '0'return menu):"); /*格式化输入学号并检验*/ 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("=>The number %s is not existing,try again?(y/n):",num); scanf("%c",&ch); if(ch='y'|ch='Y') continue; else return; else break; p=(Node *)malloc(sizeof(Node); /*申请内存空间*/ if(!p) printf("n allocate memory failure "); /*如没有申请到,打印提示信息*/ return ; /*返回主界面*/ strcpy(p->data.num,num); /*将字符串num拷贝到p->data.num中*/ stringinput(p->data.name,15,"Name:"); p->data.cgrade=numberinput("C language Score0-100:"); /*输入并检验分数,分数必须在之间*/ p->data.mgrade=numberinput("Math Score0-100:"); /*输入并检验分数,分数必须在之间*/ p->data.egrade=numberinput("English Score0-100:"); /*输入并检验分数,分数必须在之间*/ p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; /*计算总分*/ p->data.ave=(float)(p->data.total/3); /*计算平均分*/ p->data.mingci=0; p->next=NULL; /*表明这是链表的尾部结点*/ r->next=p; /*将新建的结点加入链表尾部中*/ r=p; saveflag=1; return ;void Qur(Link l) /*按学号或姓名,查询学生记录*/int select; /*1:按学号查,:按姓名查,其他:返回主界面(菜单)*/char searchinput20; /*保存用户输入的查询内容*/Node *p;if(!l->next) /*若链表为空*/ system("cls"); printf("n=>No student record!n"); getchar(); return;system("cls");printf("n =>1 Search by number =>2 Search by namen");printf(" please choice1,2:");scanf("%d",&select);if(select=1) /*按学号查询*/ stringinput(searchinput,10,"input the existing student number:"); p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值的节点,并返回节点的指针*/ if(p) /*若p!=NULL*/ printheader(); printdata(p); printf(END); printf("press any key to return"); getchar(); else Nofind(); getchar();else if(select=2) /*按姓名查询*/ stringinput(searchinput,15,"input the existing student name:"); p=Locate(l,searchinput,"name"); if(p) printheader(); printdata(p); printf(END); printf("press any key to return"); getchar(); else Nofind(); getchar();else Wrong(); getchar(); /*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/void Del(Link l)int sel;Node *p,*r;char findmess20;if(!l->next) system("cls"); printf("n=>No student record!n"); getchar(); return;system("cls");Disp(l);printf("n =>1 Delete by number =>2 Delete by namen");printf(" please choice1,2:");scanf("%d",&sel);if(sel=1) stringinput(findmess,10,"input the existing student number:"); p=Locate(l,findmess,"num"); if(p) /*p!=NULL*/ r=l; while(r->next!=p) r=r->next; r->next=p->next;/*将p所指节点从链表中去除*/ free(p); /*释放内存空间*/ printf("n=>delete success!n"); getchar(); saveflag=1; else Nofind(); getchar();else if(sel=2) /*先按姓名查询到该记录所在的节点*/ stringinput(findmess,15,"input the existing student name"); p=Locate(l,findmess,"name"); if(p) r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf("n=>delete success!n"); getchar(); saveflag=1; else Nofind(); getchar();else Wrong(); getchar();/*修改学生记录。先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改*/void Modify(Link l)Node *p;char findmess20;if(!l->next) system("cls"); printf("n=>No student record!n"); getchar(); return;system("cls");printf("modify student recorder");Disp(l);stringinput(findmess,10,"input the existing student number:"); /*输入并检验该学号*/p=Locate(l,findmess,"num"); /*查询到该节点*/if(p) /*若p!=NULL,表明已经找到该节点*/ printf("Number:%s,n",p->data.num); printf("Name:%s,",p->data.name); stringinput(p->data.name,15,"input new name:"); printf("C language score:%d,",p->data.cgrade); p->data.cgrade=numberinput("C language Score0-100:"); printf("Math score:%d,",p->data.mgrade); p->data.mgrade=numberinput("Math Score0-100:"); printf("English score:%d,",p->data.egrade); p->data.egrade=numberinput("English Score0-100:"); p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=(float)(p->data.total/3); p->data.mingci=0; printf("n=>modify success!n"); Disp(l); saveflag=1;else Nofind(); getchar();/*插入记录:按学号查询到要插入的节点的位置,然后在该学号之后插入一个新节点。*/void Insert(Link l) Link p,v,newinfo; /*p指向插入位置,newinfo指新插入记录*/ char ch,num10,s10; /*s保存插入点位置之前的学号,num保存输入的新记录的学号*/ int flag=0; v=l->next; system("cls"); Disp(l); while(1) stringinput(s,10,"please input insert location after the Number:"); flag=0;v=l->next; while(v) /*查询该学号是否存在,flag=1表示该学号存在*/ if(strcmp(v->data.num,s)=0) flag=1;break; v=v->next; if(flag=1) break; /*若学号存在,则进行插入之前的新记录的输入操作*/ else getchar(); printf("n=>The number %s is not existing,try again?(y/n):",s); scanf("%c",&ch); if(ch='y'|ch='Y') continue; else return; /*以下新记录的输入操作与Add()相同*/ stringinput(num,10,"input new student Number:"); v=l->next; while(v) if(strcmp(v->data.num,num)=0) printf("=>Sorry,the new number:'%s' is existing !n",num); printheader(); printdata(v); printf("n"); getchar(); return; v=v->next; newinfo=(Node *)malloc(sizeof(Node); if(!newinfo) printf("n allocate memory failure "); /*如没有申请到,打印提示信息*/ return ; /*返回主界面*/ strcpy(newinfo->data.num,num); stringinput(newinfo->data.name,15,"Name:"); newinfo->data.cgrade=numberinput("C language Score0-100:"); newinfo->data.mgrade=numberinput("Math Score0-100:"); newinfo->data.egrade=numberinput("English Score0-100:"); newinfo->data.total=newinfo->data.egrade+newinfo->data.cgrade+newinfo->data.mgrade; newinfo->data.ave=(float)(newinfo->data.total/3); newinfo->data.mingci=0; newinfo->next=NULL; saveflag=1; /*在main()有对该全局变量的判断,若为,则进行存盘操作*/ /*将指针赋值给p,因为l中的头节点的下一个节点才实际保存着学生的记录*/ p=l->next; while(1) if(strcmp(p->data.num,s)=0) /*在链表中插入一个节点*/ newinfo->next=p->next; p->next=newinfo; break; p=p->next; Disp(l); printf("nn"); getchar();/*统计该班的总

    注意事项

    本文(C语言程序设计-成绩管理系统程序设计实验报告.doc)为本站会员(哈尼dd)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开