班级成绩管理系统_第1页
班级成绩管理系统_第2页
班级成绩管理系统_第3页
班级成绩管理系统_第4页
班级成绩管理系统_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉轻工大学数计学院C语言课程设计报告班级:电脑类1307班学号:1305110009:韩品指导教师:贾瑜日期:2014年6月18日一、实验目的1 .在编辑应用程序过程中,逐步加深对 C语言编程的理解;2 .加强实践的能力,动手能力,同时进一步对所学的知识进行稳固;3 .培养初步编程的能力,为以后的学习奠定基础。二、实验内容运用所学的C语言知识编辑应用程序:班级成绩管理系统以及运动的时钟三.系统软件环境:四.课程设计题目:1 .必做题:班级成绩管理系统对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级 成绩的录入、显示、修改、排序、保存、查询等操作的管理。功能要 求:1本系统采用一个

2、结构体数组,每个数据的结构应当包括:学号、 M门课程名称。2本系统显示这样的菜单:请选择系统功能项:a、成绩录入b、成绩显示c、成绩保存d、成绩排序e、成绩修改要求先输入密码f、成绩统计1显示每门课程成绩最高的学生的基本信息。2显示每门课程的平均成绩 ,柱状图显示。3显示超过某门课程平均成绩的学生人数。4显示某门课程每个分数段区间的人数,用饼状图显示g、退出系统3执行一个具体的功能之后,程序将重新显示菜单。4将学生成绩保存到文件中。五.数据结构设计描述:一班级成绩管理系统主函数菜单函数添加显示查找修改删除排序存档读档退由一班级成绩管理系统#include <string.h>#in

3、clude <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, / 不存在OPENFAIL = 2, / 打开(文件)失败BACK = 3 / 返回);/end/定义学生信息结构体typedefstructStu

4、dentInfo/数据域unsigned intnum;/ 学号char name11;/float scores_COURSES;/ 各科成绩/指针域structStudentInfo *next;/存放下一节点的地址student;/endstudent *head=NULL;/声明链表头结点student *curr=NULL;/声明指向当前节点的指针int total = 0;/声明当前节点个数intinit();/初始化链表intadd_stu();/添加新节点intshow_all();/显示所有学生信息intfind_stu();/查找指定信息节点intmodify_stu();

5、/修改指定信息节点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, int serial);/显示指定学生信息void start();/ 程序开始界面void change(student *former, st

6、udent *latter, student *temp);/交换两个节点的数据域void main()int h,flag1,flag2;char name20="hyw",password10="hyw"char person20,password110;printf ("tt *欢送进入学生成绩管理系统!*nn");printf ("ttt用户登录nn");for(h=0;h!=5;)printf("tttt用户名:");gets(person);flag1=strcmp(person,n

7、ame);printf("tttt密码:");gets(password1);flag2=strcmp(password,password1);if(flag1=0 && flag2=0)printf("tttt登陆成功!nn");menu();break;elseprintf ("ttt用户名或密码错误!nn");printf ("ttt请注意:您还剩d次时机!nn",4-h);h+;)if (h=5)n");printf ("对不起,您输入的用户名或密码有误,已被强制退出)v

8、oid 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;case 3: find_stu(); break;case 4: modify_stu(); break;case 5: remove_stu(); break

9、;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 = (student *)malloc(_LEN);/ 为头结点申请空间if (!head)/如果申请空间失败,返回return OVERFLOW;)head->

10、next = NULL;/指向下一节点(空)curr = head->next;/当前节点指针指向第一个结点total = 0;/当前节点个数初始化为0(头结点不计算在内)return DONE;)/*功能:头插法添加新节点,并刷新学生人数*/intadd_stu()student *add = (student *)malloc(_LEN);curr = head->next;/当前节点指针指向第一个节点printf("t= 当前已存入 %d 个同学 n",total);printf("请输入第 %d个学生的信息n",total+1);if

11、 (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("t=没有可供显示的学生信息!n");return NOFOUND;curr = head->next;当前节点指针指向第一个

12、节点printf("t%4s%12s%12s"," 序号","学号","");for (int m=0; m<_COURSES; m+)printf("%7s"," 科目)printf("n");printf("tn");for (inti=1; i<=total; i+)show_stu(curr,i);curr = curr->next;当前节点指针后移printf("tn");return DONE;/

13、*功能:查找指定学生信息*/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("t%4s%12s%12s"," 序号","学号","");for (int m=0; m<

14、_COURSES; m+)printf("n");printf("tn");show_stu(curr,flag);return DONE;)curr = curr->next;+flag;)printf("t=没有找到%s !请仔细核对再查找n",stu_name);return NOFOUND;)/*功能:修改指定学生的所有信息*/intmodify_stu()charstu_name11;int flag=1;curr = head->next;/ 指向第一个节点printf("请输入要修改的学生的:&qu

15、ot;);scanf("%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)printf("t%4s%12s%12s"," 序号","学号","");for (int m=0; m<_COURSES; m+)printf("%7s"," 科目)printf("n");printf("tn");show_stu(curr,flag

16、);entering(curr);printf("t=成功修改了 %s 的所有信息!n",stu_name);return DONE;)curr = curr->next;+flag;)printf("t= 没有找到 %s !请仔细核对 n",stu_name);return NOFOUND;)/*功能:删除指定学生*/intremove_stu()student *pre=head;charstu_name11;curr = head->next;/ 指向第一个节点printf("请输入要删除的学生的:");scanf(

17、"%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)pre->next = curr->next;free(curr);-total;printf("t=已成功删除 "%s"n",stu_name);return DONE;)pre = pre->next;curr = curr->next;)printf("t= 没有找到 %s !请仔细核对 n",stu_name);return NOFOUN

18、D;)/*功能:对所有学生排序*/intsort_list()student *temp = (student *)malloc(_LEN);student *curr_i = head->next;student *curr_j = NULL;char choice='0'printf("t t1-按学号排序.t2- 按排序.n");printf("t t3-按科目排序.t0-退 出 排 序.n");printf("请选择:");scanf("%c",&choice);fflush(

19、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)change(curr_i,curr_j,temp);)curr_j = curr_j->next;)curr_i = curr_i->next;)printf("t= 排序成功!n");break;)case '2':while(curr_i-

20、>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->next;curr_i = curr_i->next;printf("t= 排序成功!n");break;case '3':while(curr_i->next != NULL)curr_j = curr_i->ne

21、xt;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("t= 排序成功!n");break;case '0':free(temp);return BACK;default:printf("t=输入有误!n");break;)free(temp);return DONE;)/*功能:保存数

22、据到文件*/intsave_to_file()curr=head->next;if (total = 0)printf("t=目前还没有任何信息,不用保存!n");return BACK;)FILE *fp;if(fp=fopen("record.dat","wb")=NULL)printf("t= 文件打开失败!n");return OPENFAIL;)while (curr != NULL)/将数据成块写入文件fwrite(char *)curr, _LEN, 1, fp);curr=curr->n

23、ext;)fclose(fp);printf("t=信息已成功保存至文件"record.dat"文件中n");return DONE;)/*功能:从文件中读取数据*/intread_from_file()char judge='y'FILE *fp;if(fp=fopen("record.dat","r")=NULL)printf("文件不存在或者打开失败!n");return OPENFAIL;printf("t=读取文件会覆盖当前信息!是否确定载入文件?(y/n):

24、");scanf("%c",&judge);if (judge='n' | judge='N') return BACK;quit();/释放以前所有信息的空间init();/重新初始化链表curr = head;/当前节点指针指向头结点student *add=(student *)malloc(_LEN);/申请空间存放读取的信息while (fread(char *)add, _LEN, 1, fp)/由于存储的信息是最新的信息在前,所以读取的时候将其添加在链表尾add->next=curr->next;c

25、urr->next=add;curr=add;add=(student *)malloc(_LEN);+total;fclose(fp);printf("t=文件载入成功!当前已有学生。n",total);return DONE;/*功能:释放内存*/ int quit()curr =head->next;student *temp=curr;while(curr != NULL)temp=curr->next;free(curr);curr=temp;curr=NULL;temp=NULL;free(head);/ 释放头节点return DONE;/*

26、功能:录入一个学生的全部信息*/int entering(student *input)printf("n请输入学生的学号(输入0退出添加):");scanf("%d",&input->num);if (0 = input->num)return BACK;printf(" 请输入学生的(五个汉字以内):");scanf("%s",&input->name);printf(" 请输入d门科目的成绩(用空格隔开):",_COURSES);for (inti=0;

27、i<_COURSES; i+)scanf("%f",&input->scoresi);return DONE;/*功能:显示指定学生的所有信息*/voidshow_stu(student *show, int serial)printf("t%4d%12d%12s",serial,show->num,show->name);for (inti=0; i<_COURSES; i+)printf("%7.1f",show->scoresi);)printf("n");)/*功

28、能:根据权限进入不同的界面*/ void start()printf("n")printf("ttt欢送使用学生成绩管理系统n");printf("t*n");printf("t*n");printf("t|t1-添加学生.t2显示信息.|n");printf("t|t3-查找学生.t4修改信息.|n");printf("t|t5-删除学生 .t6学生排序.|n");printf("t|t7-信息存档.t8读取存档.|n");print

29、f("t|t9-成绩统计.t0退出.|n");*void change(student *former, student *latter,student *temp)*temp = *former;strcpy(former->name , latter->name);strcpy(latter->name , temp->name);former->num = latter->num;latter->num = temp->num;for (inti=0; i<_COURSES; i+)former->score

30、si = latter->scoresi;latter->scoresi = temp->scoresi;)voidbing(double a,doubleb,int c)initgraph(640,480);doublex,y;char s=" A:10080红;B:8060 蓝;C:60-0 黑;"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

31、,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,350);line(200,350,200,50);line(190,60,200,50); line(210,60,200,50);line(590,340,600,350);line(590,360,600,350);char s="科目";outtextxy(580,320,s);char p=" 平均分"outtextxy(100,100,p);setfillcolor(LIGHTMAGENTA);fillrectangle(250,300,300,350);fillrectangle(350,250,400,350);fillrectangle(450,290,500,350);getch();closegraph()

温馨提示

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

评论

0/150

提交评论