班级成绩管理系统.docx

上传人:b****8 文档编号:12671992 上传时间:2023-06-07 格式:DOCX 页数:24 大小:159.31KB
下载 相关 举报
班级成绩管理系统.docx_第1页
第1页 / 共24页
班级成绩管理系统.docx_第2页
第2页 / 共24页
班级成绩管理系统.docx_第3页
第3页 / 共24页
班级成绩管理系统.docx_第4页
第4页 / 共24页
班级成绩管理系统.docx_第5页
第5页 / 共24页
班级成绩管理系统.docx_第6页
第6页 / 共24页
班级成绩管理系统.docx_第7页
第7页 / 共24页
班级成绩管理系统.docx_第8页
第8页 / 共24页
班级成绩管理系统.docx_第9页
第9页 / 共24页
班级成绩管理系统.docx_第10页
第10页 / 共24页
班级成绩管理系统.docx_第11页
第11页 / 共24页
班级成绩管理系统.docx_第12页
第12页 / 共24页
班级成绩管理系统.docx_第13页
第13页 / 共24页
班级成绩管理系统.docx_第14页
第14页 / 共24页
班级成绩管理系统.docx_第15页
第15页 / 共24页
班级成绩管理系统.docx_第16页
第16页 / 共24页
班级成绩管理系统.docx_第17页
第17页 / 共24页
班级成绩管理系统.docx_第18页
第18页 / 共24页
班级成绩管理系统.docx_第19页
第19页 / 共24页
班级成绩管理系统.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

班级成绩管理系统.docx

《班级成绩管理系统.docx》由会员分享,可在线阅读,更多相关《班级成绩管理系统.docx(24页珍藏版)》请在冰点文库上搜索。

班级成绩管理系统.docx

班级成绩管理系统

武汉轻工大学

数计学院

C语言课程设计报告

 

班级:

计算机类1307班

学号:

1305110009

姓名:

韩晶

指导教师:

贾瑜

日期:

2014年6月18日

 

一、实验目的

1.在编辑应用程序过程中,逐步加深对C语言编程的理解;

2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;

3.培养初步编程的能力,为以后的学习奠定基础。

二、实验内容

运用所学的C语言知识编辑应用程序:

班级成绩管理系统以及运动的时钟

三.系统软件环境:

本程序主要运行在:

VisualC++6.0

TurboC/C++3.0

四.课程设计题目:

1.必做题:

班级成绩管理系统

对一个有N个学生的班级,每个学生有M门课程。

该系统实现对班级成绩的录入、显示、修改、排序、保存、查询等操作的管理。

功能要求:

(1)本系统采用一个结构体数组,每个数据的结构应当包括:

学号、姓名、M门课程名称。

(2)本系统显示这样的菜单:

请选择系统功能项:

a、成绩录入

b、成绩显示

c、成绩保存

d、成绩排序

e、成绩修改(要求先输入密码)

f、成绩统计

1)显示每门课程成绩最高的学生的基本信息。

2)显示每门课程的平均成绩,柱状图显示。

3)显示超过某门课程平均成绩的学生人数。

4)显示某门课程每个分数段区间的人数,用饼状图显示。

g、退出系统

(3)执行一个具体的功能之后,程序将重新显示菜单。

(4)将学生成绩保存到文件中。

 

五.数据结构设计描述:

(一)班级成绩管理系统

主函数

菜单函数

添加显示查找修改删除排序存档读档退出

六.源程序

(一)班级成绩管理系统

#include

#include

#include

#include

#include

#define_COURSES3//定义科目数

#define_LENsizeof(student)//定义结构体大小

//枚举返回值情况

enumstatus

{

OVERFLOW=-1,//内存(溢出)问题

DONE=0,//成功

NOFOUND=1,//不存在

OPENFAIL=2,//打开(文件)失败

BACK=3//返回

};

//end

//定义学生信息结构体

typedefstructStudentInfo

{

//数据域

unsignedintnum;//学号

charname[11];//姓名

floatscores[_COURSES];//各科成绩

//指针域

structStudentInfo*next;//存放下一节点的地址

}student;

//end

student*head=NULL;//声明链表头结点

student*curr=NULL;//声明指向当前节点的指针

inttotal=0;//声明当前节点个数

intinit();//初始化链表

intadd_stu();//添加新节点

intshow_all();//显示所有学生信息

intfind_stu();//查找指定信息节点

intmodify_stu();//修改指定信息节点

intremove_stu();//删除指定信息节点

intsort_list();//对链表排序

intsave_to_file();//将所有信息保存至文件

intread_from_file();//从文件中读取信息

intpicture();//画分布图

intquit();//释放所有节点空间

intentering(student*input);//录入学生信息

voidmenu();

voidshow_stu(student*show,intserial);//显示指定学生信息

voidstart();//程序开始界面

voidchange(student*former,student*latter,student*temp);//交换两个节点的数据域

voidmain(){

inth,flag1,flag2;

charname[20]="hyw",password[10]="hyw";

charperson[20],password1[10];

printf("\t\t********欢迎进入学生成绩管理系统!

********\n\n");

printf("\t\t\t用户登录\n\n");

for(h=0;h!

=5;)

{

printf("\t\t\t\t用户名:

");

gets(person);

flag1=strcmp(person,name);

printf("\t\t\t\t密码:

");

gets(password1);

flag2=strcmp(password,password1);

if(flag1==0&&flag2==0)

{

printf("\t\t\t\t登陆成功!

\n\n");

menu();

break;

}

else

{

printf("\t\t\t用户名或密码错误!

\n\n");

printf("\t\t\t请注意:

您还剩%d次机会!

\n\n",4-h);

h++;

}

}

if(h=5)

printf("对不起,您输入的用户名或密码有误,已被强制退出。

\n");

}

voidmenu()

{

intchoice=0;

init();

while

(1){system("cls");//清屏

start();

printf("请选择:

");

scanf("%d",&choice);

fflush(stdin);//清空缓冲区

switch(choice){

case1:

add_stu();break;

case2:

show_all();break;

case3:

find_stu();break;

case4:

modify_stu();break;

case5:

remove_stu();break;

case6:

sort_list();break;

case7:

save_to_file();break;

case8:

read_from_file();break;

case9:

picture();break;

case0:

quit();exit(0);break;

default:

break;

}

system("pause");//暂停批文件的处理并显示消息

}

}

intinit(){

head=(student*)malloc(_LEN);//为头结点申请空间

if(!

head)

{//如果申请空间失败,返回

returnOVERFLOW;

}

head->next=NULL;//指向下一节点(空)

curr=head->next;//当前节点指针指向第一个结点

total=0;//当前节点个数初始化为0(头结点不计算在内)

returnDONE;

}

/*功能:

头插法添加新节点,并刷新学生人数*/

intadd_stu(){

student*add=(student*)malloc(_LEN);

curr=head->next;//当前节点指针指向第一个节点

printf("\t====当前已存入%d个同学\n",total);

printf("请输入第%d个学生的信息\n",total+1);

if(BACK==entering(add)){

free(add);

returnBACK;

}

head->next=add;//头结点指针域指向新建的节点

add->next=curr;//新建节点指针域指向第一个节点

curr=add;//当前节点指向新建的节点

total+=1;//更新学生总人数

returnDONE;

}

/*功能:

显示所有学生信息*/

intshow_all(){

if(0==total){

printf("\t====没有可供显示的学生信息!

\n");

returnNOFOUND;

}

curr=head->next;//当前节点指针指向第一个节点

printf("\t%4s%12s%12s","序号","学号","姓名");

for(intm=0;m<_COURSES;m++){

printf("%7s","科目");

}

printf("\n");

printf("\t-------------------------------------------------------------\n");

for(inti=1;i<=total;i++){

show_stu(curr,i);

curr=curr->next;//当前节点指针后移

}

printf("\t-------------------------------------------------------------\n");

returnDONE;

}

/*功能:

查找指定学生信息*/

intfind_stu(){

charstu_name[11];

intflag=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(intm=0;m<_COURSES;m++){

printf("%7s","科目");

}

printf("\n");

printf("\t-------------------------------------------------------------\n");

show_stu(curr,flag);

returnDONE;

}

curr=curr->next;

++flag;

}

printf("\t====没有找到%s!

请仔细核对姓名再查找\n",stu_name);

returnNOFOUND;

}

/*功能:

修改指定学生的所有信息*/

intmodify_stu(){

charstu_name[11];

intflag=1;

curr=head->next;//指向第一个节点

printf("请输入要修改的学生的姓名:

");

scanf("%s",stu_name);

while(curr!

=NULL){

if(strcmp(stu_name,curr->name)==0){

printf("\t%4s%12s%12s","序号","学号","姓名");

for(intm=0;m<_COURSES;m++){

printf("%7s","科目");

}

printf("\n");

printf("\t-------------------------------------------------------------\n");

show_stu(curr,flag);

entering(curr);

printf("\t====成功修改了%s的所有信息!

\n",stu_name);

returnDONE;

}

curr=curr->next;

++flag;

}

printf("\t====没有找到%s!

请仔细核对姓名\n",stu_name);

returnNOFOUND;

}

/*功能:

删除指定学生*/

intremove_stu(){

student*pre=head;

charstu_name[11];

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\"\n",stu_name);

returnDONE;

}

pre=pre->next;

curr=curr->next;

}

printf("\t====没有找到%s!

请仔细核对姓名\n",stu_name);

returnNOFOUND;

}

/*功能:

对所有学生排序*/

intsort_list(){

student*temp=(student*)malloc(_LEN);

student*curr_i=head->next;

student*curr_j=NULL;

charchoice='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!

=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;

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->next;

while(curr_j!

=NULL){

if(curr_i->scores[0]scores[0]){

change(curr_i,curr_j,temp);

}

curr_j=curr_j->next;

}

curr_i=curr_i->next;

}

printf("\t====排序成功!

\n");

break;

}

case'0':

{

free(temp);

returnBACK;

}

default:

{

printf("\t====输入有误!

\n");break;

}

}

free(temp);

returnDONE;

}

/*功能:

保存数据到文件*/

intsave_to_file(){

curr=head->next;

if(total==0){

printf("\t====目前还没有任何信息,不用保存!

\n");

returnBACK;

}

FILE*fp;

if((fp=fopen("record.dat","wb"))==NULL){

printf("\t====文件打开失败!

\n");

returnOPENFAIL;

}

while(curr!

=NULL){

//将数据成块写入文件

fwrite((char*)curr,_LEN,1,fp);

curr=curr->next;

}

fclose(fp);

printf("\t====信息已成功保存至文件\"record.dat\"文件中\n");

returnDONE;

}

/*功能:

从文件中读取数据*/

intread_from_file()

{

charjudge='y';

FILE*fp;

if((fp=fopen("record.dat","r"))==NULL){

printf("文件不存在或者打开失败!

\n");

returnOPENFAIL;

}

printf("\t====读取文件会覆盖当前信息!

是否确定载入文件?

(y/n):

");

scanf("%c",&judge);

if(judge=='n'||judge=='N'){

returnBACK;

}

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*)malloc(_LEN);

++total;

}

fclose(fp);

printf("\t====文件载入成功!

当前已有%d个学生。

\n",total);

returnDONE;

}

/*功能:

释放内存*/

intquit(){

curr=head->next;

student*temp=curr;

while(curr!

=NULL){

temp=curr->next;

free(curr);

curr=temp;

}

curr=NULL;

temp=NULL;

free(head);//释放头节点

returnDONE;

}

/*功能:

录入一个学生的全部信息*/

intentering(student*input){

printf("\n请输入学生的学号(输入0退出添加):

");

scanf("%d",&input->num);

if(0==input->num){

returnBACK;

}

printf("请输入学生的姓名(五个汉字以内):

");

scanf("%s",&input->name);

printf("请输入%d门科目的成绩(用空格隔开):

",_COURSES);

for(inti=0;i<_COURSES;i++){

scanf("%f",&input->scores[i]);

}

returnDONE;

}

/*功能:

显示指定学生的所有信息*/

voidshow_stu(student*show,intserial){

printf("\t%4d%12d%12s",serial,show->num,show->name);

for(inti=0;i<_COURSES;i++){

printf("%7.1f",show->scores[i]);

}

printf("\n");

}

/*功能:

根据权限进入不同的界面*/

voidstart(){

printf("\n")

printf("\t\t\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");

printf("\t|\t9----成绩统计.\t0----退出.|\n");

printf("\t*************************************************************\n");

}

voidchange(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->scores[i]=latter->scores[i];

latter->scores[i]=temp->scores[i];

}

}

voidbing(doublea,doubleb,intc){

initgraph(640,480);

doublex,y;

chars[]="A:

100~80红;B:

80~60

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2