高等教育C语言学生管理系统实验设计报告Word格式.docx

上传人:b****1 文档编号:5741689 上传时间:2023-05-05 格式:DOCX 页数:26 大小:352.42KB
下载 相关 举报
高等教育C语言学生管理系统实验设计报告Word格式.docx_第1页
第1页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第2页
第2页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第3页
第3页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第4页
第4页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第5页
第5页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第6页
第6页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第7页
第7页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第8页
第8页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第9页
第9页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第10页
第10页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第11页
第11页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第12页
第12页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第13页
第13页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第14页
第14页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第15页
第15页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第16页
第16页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第17页
第17页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第18页
第18页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第19页
第19页 / 共26页
高等教育C语言学生管理系统实验设计报告Word格式.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

高等教育C语言学生管理系统实验设计报告Word格式.docx

《高等教育C语言学生管理系统实验设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《高等教育C语言学生管理系统实验设计报告Word格式.docx(26页珍藏版)》请在冰点文库上搜索。

高等教育C语言学生管理系统实验设计报告Word格式.docx

相当于打开文件并读取文件中所有学生的数据(包括班级、学号、姓名、成绩等)到动态链表。

⑦、统计功能。

根据录入的数据项在动态链表中计算学生成绩(包括总分,平均分以及各分数段的人数及其信息)。

可按成绩、学号或姓名排序,而成绩排序又可按单科成绩或总成绩排序。

⑧、插入功能。

⑨、退出功能。

退出系统或退出程序,可增加一个退出函数语句,在退出时可提示保存文件,防止数据丢失。

2.概要设计

在需求分析的基础上,确定系统总体框架(即系统功能结构图、系统模块结构图)。

系统各个功能的详细解释。

1.Enterlist

创建链表。

输入学生的成绩和其他信息,并且自动计算总成绩和平均成绩

2.Deletearecordfromlist

删除记录。

根据学号在动态链表中查找并删除一个学生的成绩记录。

3.Printlist

显示记录。

自动按总成绩从高到低排序后显示动态链表中所有学生的成绩记录。

4.Searchrecordonname

查找记录。

根据学号在动态链表中查找并显示一个学生的成绩记录。

5.Savethefile

保存数据。

将动态链表的所有数据写入(或存入、存到)二进制文件中。

6.LoadFile

读取数据。

读取文件中所有学生的数据(包括班级、学号、姓名、成绩等)到动态链表。

7.Computethescore

统计数据。

将动态链表的所有学生数据进行各分数段的统计。

8.Insertrecordtolist

插入记录。

在动态链表中插入一个学生的成绩记录。

9.Quit

退出。

如菜单返回值为0程序结束。

3.详细设计

1)、数据结构设计

系统使用了结构体类型存储学生的成绩记录和其他记录。

typedefstructS1

{

charno[9];

/*学号*/

charname[15];

/*姓名*/

charsex;

/*性别*/

intage;

/*年龄*/

intscore[4];

/*成绩*/

floatsum;

/*总分*/

floataverage;

/*平均分*/

intorder;

/*排名*/

structS1*next;

}STUDENT;

2)、算法结构设计

系统使用了以下函数来实现系统各个模块的功能。

函数名称

函数功能

student*enter_list()

创建链表,完成数据录入功能

voidcompute_the_score()

对学生成绩排序并确定名次

voidinsert_record()

按学号插入一个结点数据

voidprint_list()

显示所有已经建立好的节点的节点号和该节点中数据项内容

voidsearch_record()

按学号查找并显示一个结点数据

voiddelete_a_record()

按学号查找并删除一个结点数据

voidsave_the_file()

保存数据到文件模块

voidload_the_file()

加载存储在外部介质的文件到内存或导入信息模块

voidinit()

显示菜单并获得用户键盘输入的选项*

voidmain()

程序从主函数开始执行

系统主要功能的实现过程和方法。

在界面状态下,输入1后调用student*enter_list()

函数创建动态链表,即提示输入初始的学生信息,其中包括学生的学号、姓名、性别和数学、英语、物理、历史的成绩,若输入为0退出返回主菜单。

输入完成后,系统调用voidcompute_the_score()函数计算每个学生的总成绩和平均成绩,还可以调用voidsave_the_file()函数对指定的文件进行写操作,把输入到动态链表的所有学生信息保存到文件中。

在界面状态下,输入8后调用voidinsert_record()函数在动态链表中插入一个学生的成绩记录,并且链表结点数加1。

在插入记录过程中若学号输入0则返回主菜单。

在界面状态下,输入3后先调用voidprint_list()函数对学生成绩排序并确定名次,而这个函数运用冒泡法进行排序,排序完毕后再调用voidprint_list()函数显示所有已经建立好的节点的节点号和该节点中数据项内容,即按总成绩从高到低排序后显示动态链表中所有学生的成绩记录。

输出所有记录到屏幕上显示后自动则返回主菜单。

在界面状态下,输入4后调用voidsearch_record()函数,即先用一个指针变量接收输入的学号,再与动态链表中各结点的学号一一比较,如果没有则返回失败信息,如果找到就将输出此学生全部信息到屏幕上显示出来。

在查找记录过程中若学号输入0则提示找不到并返回主菜单。

在界面状态下,输入2后调用voiddelete_a_record()函数,即先用一个变量接收输入的学号,再与动态链表中各结点的学号一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,并且链表结点数减1。

在删除记录过程中若学号输入0则提示找不到并返回主菜单。

在界面状态下,输入5后调用voidsave_the_file()函数,先用一个文件(FILE)类型结构体的指针变量fp接收fopen(文件名,文件使用方式)函数的返回值(地址值),若打开操作失败,其返回值为NULL(即地址值为0,是一个无效的指向)。

若打开操作成功,返回值为指向被打开文件的文件信息区(结构体变量)的起始地址,该返回值要立即赋值给文件类型指针变量(例:

//FILE*fp)保存起来,否则fopen函数返回值的丢失会导致无法对被打开的文件进行操作。

最后使用fclose(fp)函数关闭文件。

在界面状态下,输入6后调用voidload_the_file()加载存储在外部介质的文件到内存或导入信息模块读取文件中所有学生的数据(包括班级、学号、姓名、成绩等)到动态链表。

在界面状态下,输入9后用一个函数voidquit()来实现,可首先提示将信息保存到文件中,释放动态创建的内存空间,再退出此程序。

3)流程图

4.代码设计

#include<

stdio.h>

stdlib.h>

#defineTOTALSTU10

longno;

charname[15];

charsex;

intage;

intscore[4];

floatsum;

floataverage;

intorder;

structS1*next;

}student;

intn;

charflag=0;

student*head;

/*链表头结点指针*/

charfilename[12];

student*enter_list()/*建立链表,输入成批学生信息*/

student*p1,*p2;

n=0;

p1=p2=(student*)malloc(sizeof(student));

printf("

Pleaseinputstudentinfo:

(Press0toend)\n"

);

Num:

"

scanf("

%ld"

&

p1->

no);

if(p1->

no==0)return(0);

Name:

%c"

p1->

name);

gets(p1->

Age:

%d"

age);

Sex(m/f):

sex);

while(p1->

sex!

='

f'

&

m'

{printf("

Error!

!

pleaseinputagain:

\n"

}

Math:

score[0]);

English:

score[1]);

Physics:

score[2]);

History:

score[3]);

head=NULL;

no!

=0)/*输入为0时结束*/

n=n+1;

if(n==1)head=p1;

elsep2->

next=p1;

p2=p1;

p1=(student*)malloc(sizeof(student));

\nNum:

no==0)break;

Sex(m/f):

\nMath:

scanf("

p2->

next=NULL;

return(head);

voidinsert_record()/*插入学生节点*/

student*p0;

student*p1;

student*p2;

p0=(student*)malloc(sizeof(student));

p1=p2=head;

/*p1指向原链表*/

no:

***name:

***sex:

*age:

**score:

**,**,**,**\n"

/*插入学生记录,保存在study中*/

p0->

p0->

gets(p0->

%ldName:

%sSex:

%cAge:

%dRecord:

Math:

%d,English:

%d,Physics%d,History:

%d\n"

no,p0->

name,p0->

sex,p0->

age,p0->

score[0],p0->

score[1],p0->

score[2],p0->

if(head==NULL)

{head=p0;

}

else

while((p0->

no>

no)&

(p1->

next!

=NULL))/*按Num升序插入*/

p1=p1->

next;

if(p0->

no<

=p1->

no)

if(head==p1)head=p0;

next=p0;

voidsearch_record()/*根据学生学号,查找学生记录*/

student*p;

longnumber;

p=head;

\n****Enterlistisempty!

****\n"

return;

PleaseinputtheNumyouwanttosearch:

number);

while(p->

=number&

p->

=NULL)

p=p->

if(p->

no==number)

\n*************foundit*****************\n"

%d,Physics:

%d,History:

p->

no,p->

name,p->

sex,

age,p->

score[0],p->

score[1],p->

score[2],p->

/*查找完成后显示*/

elseprintf("

%ldcan'

tbefound\n"

number);

\nEnterlistisempty!

PleaseinputtheNumyouwanttodelete:

/*输入要删去记录的学生学号*/

p1=head;

while(no!

no&

=NULL)/*与链表中的学生学号依次比较*/

if(no==p1->

no)/*找到了,将该节点删去*/

if(p1==head)head=p1->

next=p1->

hasdelete:

%ld\n"

no);

n=n-1;

%ldnotbeenfound!

/*找不到,提示*/

Thereare%drecords\n"

n);

if(head!

do

Student:

Num:

%-5ldName:

%-10sSex:

sex,p->

Record:

%-5dEnglish:

%-10dPhysics:

%dHistory:

}while(p!

=NULL);

voidcompute_the_score()/*整理学生成绩*/

inti,j,m,k=0;

floatthesum=0;

student*a[TOTALSTU];

student*p0,*p;

p0=head;

/*用指针P0调用动态链表*/

while(p0!

=NULL)/*计算各节点总分及平均成绩*/

thesum=0;

for(j=0;

j<

4;

j++)

thesum+=p0->

score[j];

sum=thesum;

average=(float)(p0->

sum)/4;

p0=p0->

=NULL)/*将动态链表各节点地址赋给指针数组*/

a[k++]=p0;

m=k;

a[k]=NULL;

for(i=0;

i<

m-1;

i++)/*冒泡法排序,使各节点按总分降序排列*/

m-1-i;

if((*a[j]).sum<

(*a[j+1]).sum)

p=a[j];

a[j]=a[j+1];

a[j+1]=p;

for(i=0,j=1;

m;

i++)/*依次给个节点填入总分名次*/

(*a[i]).order=j++;

***Sortbyrecords:

***\n"

i++)/*显示排序后完整信息*/

Ranking:

(*a[i]).order);

***Num:

%ld***Name:

(*a[i]).no,(*a[i]).name,(*a[i]).sex,(*a[i]).age);

***Record***Math:

%dEnglish:

%dPhysics:

%d\n"

(*a[i]).score[0],(*a[i]).score[1],(*a[i]).score[2],(*a[i]).score[3]);

***Totalscore:

%f***Averagescore:

%f\n\n\n"

(*a[i]).sum,(*a[i]).average);

\n\n***Thelistofaverage>

=90:

*******\n"

i++)/*均分在90分以上(含90)学生名单*/

if((*a[i]).average>

=90)

{printf("

=80:

i++)/*均分在80分以上学生名单*/

=80)

=70:

i++)/*列出70分以上学生名单*/

=70)

{prin

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

当前位置:首页 > 小学教育 > 语文

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

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