




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉轻工大学 数计学院 C语言课程设计报告班级:计算机类1307班学号: 1305110009姓名: 韩晶 指导教师:贾瑜 日期:2014年6月18日一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础。二、实验内容运用所学的C语言知识编辑应用程序:班级成绩管理系统以及运动的时钟三系统软件环境:本程序主要运行在: Visual C+ 6.0 Turbo C/C+ 3.0四.课程设计题目:1.必做题:班级成绩管理系统 对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级
2、成绩的录入、显示、修改、排序、保存、查询等操作的管理。功能要求: (1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 (2)本系统显示这样的菜单: 请选择系统功能项: a、成绩录入 b、成绩显示 c、成绩保存 d、成绩排序e、成绩修改(要求先输入密码) f、成绩统计1)显示每门课程成绩最高的学生的基本信息。 2)显示每门课程的平均成绩 ,柱状图显示。3)显示超过某门课程平均成绩的学生人数。 4)显示某门课程每个分数段区间的人数,用饼状图显示。g、退出系统 (3)执行一个具体的功能之后,程序将重新显示菜单。 (4)将学生成绩保存到文件中。五数据结构设计描述:(一)
3、班级成绩管理系统主函数菜单函数添加显示查找修改删除排序存档读档退出六.源程序(一)班级成绩管理系统#include <string.h>#include <stdio.h>#include <stdlib.h>#include<graphics.h>#include<conio.h>#define _COURSES 3/定义科目数#define _LEN sizeof(student)/定义结构体大小/枚举返回值情况enum statusOVERFLOW = -1, /内存(溢出)问题DONE = 0, /成功NOFOUND = 1,
4、 /不存在OPENFAIL = 2, /打开(文件)失败BACK = 3 /返回;/end/定义学生信息结构体typedefstructStudentInfo/数据域unsigned intnum;/学号char name11;/姓名float scores_COURSES;/各科成绩/指针域structStudentInfo *next;/存放下一节点的地址student;/endstudent *head=NULL;/声明链表头结点student *curr=NULL;/声明指向当前节点的指针int total = 0;/声明当前节点个数intinit();/初始化链表intadd_stu
5、();/添加新节点intshow_all();/显示所有学生信息intfind_stu();/查找指定信息节点intmodify_stu();/修改指定信息节点intremove_stu();/删除指定信息节点intsort_list();/对链表排序intsave_to_file();/将所有信息保存至文件intread_from_file();/从文件中读取信息int picture();/画分布图int quit();/释放所有节点空间int entering(student *input);/录入学生信息void menu();void show_stu(student *show,
6、int serial);/显示指定学生信息void start();/程序开始界面void change(student *former, student *latter, student *temp);/交换两个节点的数据域void main()int h,flag1,flag2;char name20="hyw",password10="hyw"char person20,password110;printf ("tt * 欢迎进入学生成绩管理系统!*nn");printf ("ttt 用 户 登 录nn");
7、for(h=0;h!=5;)printf("tttt 用户名:");gets(person); flag1=strcmp(person,name);printf("tttt 密码:");gets(password1); flag2=strcmp(password,password1);if(flag1=0 && flag2=0)printf("tttt 登陆成功!nn");menu();break;elseprintf ("ttt 用户名或密码错误!nn");printf ("ttt 请注
8、意:您还剩%d次机会!nn",4-h);h+;if (h=5)printf ("对不起,您输入的用户名或密码有误,已被强制退出。n"); void menu() int choice=0;init();while(1)system("cls");/清屏start();printf("请选择:");scanf("%d",&choice);fflush(stdin);/清空缓冲区switch (choice)case 1:add_stu(); break;case 2:show_all();break
9、;case 3: find_stu(); break;case 4: modify_stu(); break;case 5: remove_stu(); break;case 6: sort_list(); break;case 7: save_to_file(); break;case 8: read_from_file(); break;case 9: picture(); break;case 0: quit();exit(0); break;default: break;system("pause");/暂停批文件的处理并显示消息intinit()head = (s
10、tudent *)malloc(_LEN);/为头结点申请空间if (!head)/如果申请空间失败,返回return OVERFLOW;head->next = NULL;/指向下一节点(空)curr = head->next;/当前节点指针指向第一个结点total = 0;/当前节点个数初始化为0(头结点不计算在内)return DONE; /*功能:头插法添加新节点,并刷新学生人数 */intadd_stu()student *add = (student *)malloc(_LEN);curr = head->next;/当前节点指针指向第一个节点printf(&qu
11、ot;t=当前已存入 %d 个同学n",total);printf("请输入第 %d 个学生的信息n",total+1);if (BACK = entering(add)free(add);return BACK;head->next = add;/头结点指针域指向新建的节点add->next = curr;/新建节点指针域指向第一个节点curr = add; /当前节点指向新建的节点total += 1; /更新学生总人数return DONE;/*功能:显示所有学生信息 */intshow_all()if ( 0 = total )printf(&
12、quot;t=没有可供显示的学生信息!n");return NOFOUND;curr = head->next;/当前节点指针指向第一个节点printf("t%4s%12s%12s","序号","学号","姓名");for (int m=0; m<_COURSES; m+)printf("%7s","科目");printf("n");printf("t-n");for (inti=1; i<=total; i
13、+)show_stu(curr,i);curr = curr->next;/当前节点指针后移printf("t-n");return DONE;/*功能:查找指定学生信息 */intfind_stu()charstu_name11;int flag=1;printf("请输入要查找的学生姓名:");scanf("%s",stu_name);curr = head->next;/指向第一个节点while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)printf(&
14、quot;t%4s%12s%12s","序号","学号","姓名");for (int m=0; m<_COURSES; m+)printf("%7s","科目");printf("n");printf("t-n");show_stu(curr,flag);return DONE;curr = curr->next;+flag;printf("t=没有找到 %s !请仔细核对姓名再查找n",stu_name);re
15、turn NOFOUND;/*功能:修改指定学生的所有信息 */intmodify_stu()charstu_name11;int flag=1;curr = head->next;/指向第一个节点printf("请输入要修改的学生的姓名:");scanf("%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)printf("t%4s%12s%12s","序号","学号","姓名&quo
16、t;);for (int m=0; m<_COURSES; m+)printf("%7s","科目");printf("n");printf("t-n");show_stu(curr,flag);entering(curr);printf("t=成功修改了 %s 的所有信息!n",stu_name);return DONE;curr = curr->next;+flag;printf("t=没有找到 %s !请仔细核对姓名n",stu_name);return N
17、OFOUND;/*功能:删除指定学生 */intremove_stu()student *pre=head;charstu_name11;curr = head->next;/指向第一个节点printf("请输入要删除的学生的姓名:");scanf("%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)pre->next = curr->next; free(curr); -total; printf("t=已成功删除"%s
18、"n",stu_name);return DONE;pre = pre->next;curr = curr->next;printf("t=没有找到 %s !请仔细核对姓名n",stu_name);return NOFOUND;/*功能:对所有学生排序 */intsort_list()student *temp = (student *)malloc(_LEN);student *curr_i = head->next;student *curr_j = NULL;char choice='0'printf("
19、t t1-按学号排序 .t2-按姓名排序 . n");printf("t t3-按科目排序 .t0-退 出 排 序. n");printf("请选择:");scanf("%c",&choice);fflush(stdin);switch (choice)case '1':while(curr_i->next != NULL)curr_j = curr_i->next;while (curr_j != NULL)if (curr_i->num>curr_j->num)cha
20、nge(curr_i,curr_j,temp);curr_j = curr_j->next;curr_i = curr_i->next;printf("t=排序成功!n");break; case '2':while(curr_i->next != NULL)curr_j = curr_i->next;while (curr_j != NULL)if (strcmp(curr_i->name , curr_j->name) > 0)change(curr_i,curr_j,temp);curr_j = curr_j-
21、>next;curr_i = curr_i->next;printf("t=排序成功!n");break; case '3':while(curr_i->next != NULL)curr_j = curr_i->next;while (curr_j != NULL)if (curr_i->scores0 <curr_j->scores0)change(curr_i,curr_j,temp);curr_j = curr_j->next;curr_i = curr_i->next;printf("
22、t=排序成功!n");break; case '0':free(temp);return BACK; default:printf("t=输入有误!n");break;free(temp);return DONE;/*功能:保存数据到文件 */intsave_to_file()curr=head->next;if (total = 0)printf("t=目前还没有任何信息,不用保存!n");return BACK;FILE *fp;if(fp=fopen("record.dat","wb&q
23、uot;)=NULL)printf("t=文件打开失败!n");return OPENFAIL;while (curr != NULL)/将数据成块写入文件fwrite(char *)curr, _LEN, 1, fp);curr=curr->next;fclose(fp);printf("t=信息已成功保存至文件"record.dat"文件中n");return DONE;/*功能:从文件中读取数据 */intread_from_file()char judge='y'FILE *fp;if(fp=fopen(
24、"record.dat","r")=NULL)printf("文件不存在或者打开失败!n");return OPENFAIL;printf("t=读取文件会覆盖当前信息!是否确定载入文件?(y/n):");scanf("%c",&judge);if (judge='n' | judge='N')return BACK;quit();/释放以前所有信息的空间init();/重新初始化链表curr = head;/当前节点指针指向头结点student *add
25、=(student *)malloc(_LEN);/申请空间存放读取的信息while (fread(char *)add, _LEN, 1, fp)/由于存储的信息是最新的信息在前,所以读取的时候将其添加在链表尾add->next=curr->next;curr->next=add;curr=add;add=(student *)malloc(_LEN);+total;fclose(fp);printf("t=文件载入成功!当前已有%d个学生。n",total);return DONE;/*功能:释放内存 */int quit()curr =head-&g
26、t;next;student *temp=curr;while(curr != NULL)temp=curr->next;free(curr);curr=temp;curr=NULL;temp=NULL;free(head);/释放头节点return DONE;/*功能:录入一个学生的全部信息 */int entering(student *input)printf("n请输入学生的学号(输入0退出添加):");scanf("%d",&input->num);if (0 = input->num)return BACK;prin
27、tf("请输入学生的姓名(五个汉字以内):");scanf("%s",&input->name);printf("请输入%d门科目的成绩(用空格隔开):", _COURSES);for (inti=0; i<_COURSES; i+)scanf("%f",&input->scoresi);return DONE;/*功能:显示指定学生的所有信息 */voidshow_stu(student *show, int serial)printf("t%4d%12d%12s&qu
28、ot;,serial,show->num,show->name);for (inti=0; i<_COURSES; i+)printf("%7.1f",show->scoresi);printf("n");/*功能:根据权限进入不同的界面 */void start()printf("n")printf("ttt欢迎使用学生成绩管理系统n");printf("t*n");printf("t|t1-添 加 学 生.t2-显 示 信 息. |n"); pri
29、ntf("t|t3-查 找 学 生.t4-修 改 信 息. |n"); printf("t|t5-删 除 学 生.t6-学 生 排 序. |n");printf("t|t7-信 息 存 档.t8-读 取 存 档. |n");printf("t|t9-成 绩 统 计.t0-退 出. |n");printf("t*n");void change(student *former, student *latter,student *temp) *temp = *former;strcpy(former-
30、>name , latter->name);strcpy(latter->name , temp->name);former->num = latter->num;latter->num = temp->num;for (inti=0; i<_COURSES; i+)former->scoresi = latter->scoresi;latter->scoresi = temp->scoresi; voidbing(double a,doubleb,int c)initgraph(640,480);doublex,y
31、; char s=" A:10080 红 ; B:8060 蓝 ; C:600 黑 ;"x=a/(a+b+c)*6; y=(a+b)/(a+b+c)*6;circle(320,240,160);setfillcolor(BLUE);fillpie(160,80,480,400,0,y);setfillcolor(RED);fillpie(160,80,480,400,0,x);outtextxy(160,40,s);getch();closegraph();voidzhu(float a,floatb,float c)initgraph(640,480);setcolor(YELLOW);line(200,350,600,35
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 枸杞买卖合同(2篇)
- 《行业会计实务》课件-项目三 3.1施工企业会计的特点
- 《官疾病的影像诊断》课件
- 四年级《三角形内角和》教学设计
- 2025合同买卖协议书
- 初中历史明清时期的科技与文化 课件 2024-2025学年统编版七年级历史下册
- 初中历史辽宋夏金元时期经济的繁荣课件-2024-2025学年统编版七年级历史下册
- 新质生产力建议
- 神经系统损伤的临床护理
- 浙江国企招聘2025台州湾新区招聘8人笔试参考题库附带答案详解
- 2025购销合同(电子产品)范文
- 基于全生命周期的绿色建筑成本影响因素研究
- 2025年普法知识竞赛题库及答案(共80题)
- 心力衰竭护理查房 课件
- 【课时练基础作业】人教版四年级数学下册第四单元《期中计算能力测试》(含答案)
- 树木修剪合同协议
- 2025年兰州市九年级诊断考试(一诊)物理试卷
- 【初中地理】西亚课件-2024-2025学年人教版(2024)七年级地理下册
- 2024年4月27日福建省事业单位《综合基础知识》真题及答案
- 农民工工资专用账户管理制度
- 药物治疗管理MTM
评论
0/150
提交评论