班级成绩管理系统_第1页
班级成绩管理系统_第2页
班级成绩管理系统_第3页
班级成绩管理系统_第4页
免费预览已结束,剩余19页可下载查看

下载本文档

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

文档简介

1、武汉轻工大学数计学院C 语言课程设计报告班级 : 计算机类 1307 班学号:1305110009姓名:韩晶指导教师:贾瑜日期:2014年 6月 18日一、实验目的1. 在编辑应用程序过程中,逐步加深对C语言编程的理解;精选文库2. 加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3. 培养初步编程的能力,为以后的学习奠定基础。二、实验内容运用所学的 C 语言知识编辑应用程序: 班级成绩管理系统以及运动的时钟三系统软件环境:本程序主要运行在:Visual C+ 6.0Turbo C/C+ 3.0四. 课程设计题目:1. 必做题:班级成绩管理系统对一个有 N个学生的班级, 每个学生有

2、M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存、查询等操作的管理。功能要求:( 1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、 M门课程名称。( 2)本系统显示这样的菜单: 请选择系统功能项:-2精选文库a、成绩录入b、成绩显示c、成绩保存d、成绩排序e、成绩修改(要求先输入密码)f 、成绩统计1)显示每门课程成绩最高的学生的基本信息。2)显示每门课程的平均成绩,柱状图显示。3)显示超过某门课程平均成绩的学生人数。4)显示某门课程每个分数段区间的人数,用饼状图显示。g、退出系统( 3)执行一个具体的功能之后,程序将重新显示菜单。( 4)将学生成绩保存到文件中。

3、-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, / 内存 ( 溢出 )

4、问题DONE = 0, /成功-4精选文库NOFOUND = 1, / 不存在OPENFAIL = 2, /打开 ( 文件 ) 失败BACK = 3 /返回;/end/ 定义学生信息结构体typedefstructStudentInfo/ 数据域unsigned intnum;/学号char name11;/姓名float scores_COURSES;/各科成绩/ 指针域structStudentInfo *next;/student;/end存放下一节点的地址student *head=NULL;/声明链表头结点student *curr=NULL;/声明指向当前节点的指针int tota

5、l = 0;/声明当前节点个数intinit();/初始化链表intadd_stu();/添加新节点intshow_all();/显示所有学生信息intfind_stu();/查找指定信息节点intmodify_stu();/修改指定信息节点intremove_stu();/删除指定信息节点intsort_list();/对链表排序intsave_to_file();/将所有信息保存至文件intread_from_file();/从文件中读取信息int picture();/画分布图int quit();/释放所有节点空间-5精选文库int entering(student *input);/

6、 void menu();录入学生信息void show_stu(student *show, 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 *欢迎进入学生成绩管理系

7、统!*nn");printf ("tttfor(h=0;h!=5;)用 户 登 录nn");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 ("

8、;ttt用户名或密码错误!nn");printf ("ttt请注意:您还剩%d次机会 !nn",4-h);-6精选文库h+;if (h=5)printf ("对不起,您输入的用户名或密码有误, 已被强制退出。n");void menu()int choice=0;init();while(1)system("cls");/清屏start();printf("请选择: ");scanf("%d",&choice);fflush(stdin);/清空缓冲区switch (choic

9、e)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;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(&q

10、uot;pause");/暂停批文件的处理并显示消息-7精选文库intinit()head = (student *)malloc(_LEN);/ if (!head)为头结点申请空间/如果申请空间失败, 返回return OVERFLOW;head->next = NULL;/指向下一节点 ( 空)curr = head->next;/当前节点指针指向第一个结点total = 0;/当前节点个数初始化为0( 头结点不计算在内)return DONE;/* 功能:头插法添加新节点,并刷新学生人数*/intadd_stu()student *add = (student *

11、)malloc(_LEN);curr = head->next;/当前节点指针指向第一个节点printf("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; /更新学生总人数retu

12、rn DONE;/*功能:显示所有学生信息*/-8精选文库intshow_all()if ( 0 = total )printf("t=没有可供显示的学生信息!n");return NOFOUND;curr = head->next;/当前节点指针指向第一个节点printf("t%4s%12s%12s","序号 "," 学号 "," 姓名 ");for (int m=0; m<_COURSES; m+)printf("%7s","科目 ");p

13、rintf("n");printf("t-n");for (inti=1; i<=total; i+)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;/指向

14、第一个节点while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)printf("t%4s%12s%12s","序号 "," 学号 ","姓名 ");for (int m=0; m<_COURSES; m+)-9精选文库printf("%7s","科目 ");printf("n");printf("t-n");show_stu(curr,flag);return DON

15、E;curr = curr->next;+flag;printf("t=没有找到 %s ! 请仔细核对姓名再查找n",stu_name);return NOFOUND;/* 功能:修改指定学生的所有信息 intmodify_stu()*/charstu_name11;int flag=1;curr = head->next;/指向第一个节点printf("请输入要修改的学生的姓名:");scanf("%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->

16、;name) = 0)printf("t%4s%12s%12s","序号 "," 学号 ","姓名 ");for (int m=0; m<_COURSES; m+)printf("%7s","科目 ");printf("n");printf("t-n");show_stu(curr,flag);entering(curr);-10精选文库printf("t=成功修改了%s 的所有信息 !n",stu_name)

17、;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("%s",stu_name);while (curr != NULL)if (strcmp(stu_name

18、,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 NOFOUND;-11精选文库/* 功能:对所有学生排序intsort_list()student *temp = (student *)mall

19、oc(_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(stdin);switch (choice)case '1':while(curr_i->next

20、!= 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->next != NULL)curr_j = curr_i->next;-12精选文库while (curr_j !=

21、 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->next;while (curr_j != NULL)if (curr_i->scores0 <curr_j-

22、>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:-13精选文库printf("t=输入有误!n");break;free(temp);return DONE;/* 功能:保存数据到文件intsave_to_file()curr=head->next;if (total = 0

23、)*/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->next;fclose(fp);printf("t=信息已成功保存至文件"record.d

24、at"文件中 n");return DONE;/* 功能:从文件中读取数据*/intread_from_file()-14精选文库char judge='y'FILE *fp;if(fp=fopen("record.dat","r")=NULL)printf("文件不存在或者打开失败!n");return OPENFAIL;printf("t=读取文件会覆盖当前信息! 是否确定载入文件?(y/n): ");scanf("%c",&judge);if (

25、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;curr->next=add;curr=add;add=(student *)mallo

26、c(_LEN);+total;fclose(fp);printf("t=文件载入成功 ! 当前已有 %d个学生。 n",total);return DONE;/* 功能:释放内存*/int quit()curr =head->next;-15精选文库student *temp=curr;while(curr != NULL)temp=curr->next;free(curr);curr=temp;curr=NULL;temp=NULL;free(head);/释放头节点return DONE;/* 功能:录入一个学生的全部信息 int entering(stud

27、ent *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; i<_COURSES; i+)s

28、canf("%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+)-16精选文库printf("%7.1f",show->scoresi);printf("n");/* 功能:根据权限进入不同的界

29、面void start()printf("n")*/printf("ttt欢迎使用学生成绩管理系统n");printf("t*n");printf("t|t1-添 加 学 生 .t2-显示信息.|n");printf("t|t3-查 找 学 生 .t4-修改信息.|n");printf("t|t5-删 除 学 生 .t6-学生排序.|n");printf("t|t7-信 息 存 档 .t8-读取存档.|n");printf("t|t9-成 绩 统

30、 计 .t0-退出.|n");printf("t*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

31、->scoresi = latter->scoresi;latter->scoresi = temp->scoresi;voidbing(double a,doubleb,int c)initgraph(640,480);doublex,y;-17精选文库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,350);line(200,350,200,50

温馨提示

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

评论

0/150

提交评论