ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:25.01KB ,
资源ID:28388767      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28388767.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(综合实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

综合实验报告.docx

1、综合实验报告 综合实验报告( 2011-2012年度第1学期)实验名称: C语言课程设计 题 目: 学生简单成绩管理系统 院 系: 控制与计算机学院 班 级: 信安1101班 学 号: 1111290103 姓 名: 曹廷祥 指导教师: 郑玲 设计周数: 2 周 成 绩: 日期:2012年1月 30 日一学生管理系统设计题目及要求使用下面的数据,设计一个简单的学籍管理系统,实现出最基本的功能。学生基本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成学号 姓名 性别 宿舍号码 电话号码01 张成成 男 501 8773211102 李成华 女 101 8

2、772311203 王成凤 女 101 8772311204 张明明 男 502 8773433305 陈东 男 501 8773211106 李果 男 502 8773433307 张园园 女 102 87756122 学生成绩基本信息文件(B.TXT)及其内容:学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 9001 B03 高等数学 4 45 -1 8802 C01 VF 3 65 76 66 设计功能:(1) 数据录入功能:对B.TXT进行数据录入,只录入每个学生的学号

3、、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。综合成绩、学分由程序根据条件自动运算。(2) 综合成绩的计算:如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70%。实得学分的计算:采用等级学分制。综合成绩在90-100之间 ,应得学分=学分*100%;综合成绩在80-90之间 ,应得学分=学分*80%;综合成绩在70-80之间 ,应得学分=学分*75%;综合成绩在60-70之间 ,应得学分=学分*60%;综合成绩在60以下 ,应得学分

4、=学分*0%。(3) 查询功能:分为学生基本情况查询和成绩查询两种A:学生基本情况查询:A1-输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。A2-输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。B:成绩查询:B1:输入一个学号时,查询出此生的所有课程情况,格式如下:学 号:xx 姓 名:xxxxx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx 共修:xx科,实得总学分为: xxx(4

5、) 删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。(5) 排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。二程序代码如下:/密码123#include stdio.h /*标准输入输出函数库*/#include stdlib.h /*标准函数库*/#include string.h /*字符串函数库*/#include conio.h /*屏幕操作函数库*/#define HEADER1 -学生成绩- n#define HEADER2 | 学号 | 姓名 |C语言|数学|英语 | 总分 | 平均分 |名次 | n#define HEADER3

6、 |-|-|-|-|-|-|-|-| #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 - nint saveflag=0; /*是否需要存盘的标志变量*/*定义与学生有关的数据结构*/typedef struct student /*标记为student*/char

7、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类型的指针变量*/voi

8、d menu() /*主菜单*/system(cls); /*调用DOS命令,清屏.与clrscr()功能相同*/cprintf( 学生成绩管理系统 n);cprintf( #*菜单*#n); cprintf( * 1 输入成绩 * 2 删除成绩 *n);cprintf( * 3 查询成绩 * 4 修改成绩 *n);cprintf( * 5 插入成绩 * 6 统计成绩 *n);cprintf( * 7 成绩排序 * 8 保存成绩 *n);cprintf( * 9 显示成绩 * 0 退出系统 *n);cprintf( #*#n);/*cprintf()送格式化输出至文本窗口屏幕中*/void p

9、rintheader() /*格式化输出表头*/printf(HEADER1);printf(HEADER2);printf(HEADER3);void printdata(Node *pp) /*格式化输出表中数据*/Node* p;p=pp;printf(FORMAT,DATA);void Wrong() /*输出按键错误信息*/printf(nnnnn*输入有错!按任意键继续!*n);getchar();void Nofind() /*输出未查找此学生的信息*/printf(n=没有找到这名学生!n);void Disp(Link l) /*显示单链表l中存储的学生记录,内容为stude

10、nt结构中定义的内容*/Node *p;p=l-next; /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/if(!p) /*p=NULL,NUll在stdlib中定义为0*/printf(n=没有学生记录!n);getchar();return;printf(nn);printheader(); /*输出表格头部*/while(p) /*逐条输出链表中存储的学生信息*/printdata(p);p=p-next; /*移动直下一个结点*/printf(HEADER3);getchar();/*作用:用于定位链表中符合要求的节点,并返回指向该节

11、点的指针参数:findmess保存要查找的具体内容; nameornum保存按什么查找; 在单链表l中查找;*/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

12、) if(strcmp(r-data.name,findmess)=0) /*若找到findmess值的学生姓名*/ return r; r=r-next;return 0; /*若未找到,返回一个空指针*/*输入字符串,并进行长度验证(长度lens)printf(n 超过所需长度! n); /*进行长度校验,超过lens值重新输入*/ while(strlen(n)lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/*输入分数,0分数100 | t100 | tnext;system(cls);Disp(l); /*先打印出已有的学生信息*/while(r-next

13、!=NULL)r=r-next; /*将指针移至于链表最末尾,准备添加记录*/while(1) /*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/while(1) /*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/stringinput(num,10,输入号码(按0返回菜单):); /*格式化输入学号并检验*/flag=0;if(strcmp(num,0)=0) /*输入为0,则退出添加操作,返回主界面*/ return;s=l-next; while(s) /*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/ if(strcmp(s-da

14、ta.num,num)=0) flag=1; break; s=s-next; if(flag=1) /*提示用户是否重新输入*/ getchar(); printf(=人数%s是不存在的,再试一次?(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 内存分配失败 ); /*如没有申请到,打印提示信息*/ return ; /*返回主界面*/ strcpy(p-data.num,nu

15、m); /*将字符串num拷贝到p-data.num中*/stringinput(p-data.name,15,Name:);p-data.cgrade=numberinput(C语言0-100:); /*输入并检验分数,分数必须在0100之间*/p-data.mgrade=numberinput(数学 Score0-100:); /*输入并检验分数,分数必须在0100之间*/p-data.egrade=numberinput(英语 Score0-100:); /*输入并检验分数,分数必须在0100之间*/p-data.total=p-data.egrade+p-data.cgrade+p-d

16、ata.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:按学号查,2:按姓名查,其他:返回主界面(菜单)*/char searchinput20; /*保存用户输入的查询内容*/Node *p;if(!l-next) /*若链表为空*/

17、system(cls);printf(n=没有学生记录!n);getchar();return;system(cls);printf(n =1按学号搜寻= 2按名称搜索n);printf( please choice1,2:);scanf(%d,&select);if(select=1) /*按学号查询*/stringinput(searchinput,10,输入现有的学生学号:);p=Locate(l,searchinput,num);/*在l中查找学号为searchinput值的节点,并返回节点的指针*/if(p) /*若p!=NULL*/ printheader(); printdata

18、(p); printf(END); printf(按任意键返回); getchar();else Nofind(); getchar();else if(select=2) /*按姓名查询*/stringinput(searchinput,15,输入现有的学生姓名:);p=Locate(l,searchinput,name);if(p) printheader(); printdata(p); printf(END); printf(按任意键返回); getchar();else Nofind(); getchar();elseWrong();getchar();/*删除学生记录:先找到保存该

19、学生记录的节点,然后删除该节点*/void Del(Link l)int sel;Node *p,*r;char findmess20;if(!l-next) system(cls);printf(n=没有该学生的记录n);getchar();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) /*p!=NULL*/ r=l

20、; while(r-next!=p) r=r-next; r-next=p-next;/*将p所指节点从链表中去除*/ free(p); /*释放内存空间*/ printf(n=删除成功!n); getchar(); saveflag=1;else Nofind(); getchar();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

21、); printf(n=删除成功!n); getchar(); saveflag=1;else Nofind(); getchar();elseWrong();getchar();/*修改学生记录。先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改*/void Modify(Link l)Node *p;char findmess20;if(!l-next) system(cls);printf(n=没有该学生记录!n);getchar();return;system(cls);printf(修改学生记录);Disp(l);stringinput(findmess,10,i

22、nput 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,输入新姓名:);printf(C语言分数:%d,p-data.cgrade);p-data.cgrade=numberinput(C语言分数0-100:);printf(数学分数:%d,p-data.mg

23、rade);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);p-data.mingci=0;printf(n=修改成功!n);Disp(l);saveflag=1;elseNofind();getchar();/*插入记录:按学号查询到要插入的节点的位置

24、,然后在该学号之后插入一个新节点。*/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,请输入要输入号码插入的位置:); flag=0;v=l-next; while(v) /*查询该学号是否存在,flag=1表示该学号存在*/ if(strcmp(v-data.num,s)=

25、0) flag=1;break; v=v-next; if(flag=1) break; /*若学号存在,则进行插入之前的新记录的输入操作*/ else getchar(); printf(n=学号%s是不存在的,再试一次吗?(y/n):,s); scanf(%c,&ch); if(ch=y|ch=Y) continue; else return; /*以下新记录的输入操作与Add()相同*/stringinput(num,10,输入新学号:);v=l-next;while(v) if(strcmp(v-data.num,num)=0) printf(=对不起,新的学号%s已存在!n,num); printheader(); printdata(v); printf(n); getchar(); return; v=v-next;newinfo=(Node *)malloc(sizeof(Node);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1