C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx

上传人:b****5 文档编号:20749825 上传时间:2023-01-25 格式:DOCX 页数:13 大小:23.13KB
下载 相关 举报
C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx_第1页
第1页 / 共13页
C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx_第2页
第2页 / 共13页
C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx_第3页
第3页 / 共13页
C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx_第4页
第4页 / 共13页
C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx

《C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

C语言学生学习成绩管理系统实验报告Word文档下载推荐.docx

大体结构图

2.主程序模块分析

整个系统功能共分八个功能:

1.addstudent

学生信息添加

2。

editstudent学生信息修改3.delstudent信息清单删除4.showstudent学生信息排序5。

findstudent学生成绩查找6。

loadstudent载入文件信息7。

savestudent学生信息保存0。

exit系统退出

以上八个功能就是本系统模块的主要功能,根据需求分析,对其进行功能逻辑设计:

(1)定义数据结构typedefstructstudent{?

?

}stu;

以下分别要用到的函数为:

菜单函数voidshowmenu()的函数,定位链表中符合要求的接点stu*Locate(stu*s,charfind[],intk)用于插入和查找功能,删除记录函数statusdelstudent(stu*s),显示所有记录的函数voidshow(stu*s,intk),显示学号对应的姓名voidshowid(stu*s)),排序函数statuslist(stu*s,intk),添加记录函数statusaddstudent(stu*s),查询函数statusfindstudent(stu*s)载入文件信息statusloadstudent(stu*s),保存学生statussavestudent(stu*s),关闭exit(0);

实现可以输入学生的学号、姓名、各科成绩的功能。

首先定义指向结构体的指针,动态申请空间;

用if(k==0)break;

实现当学号首字符为0则结束输入的功能;

在for循环中嵌套while{}{},实现N门课程循环N次和成绩正确输入,接着用到了数据结构的新结点插入的知识。

(3)学生信息删除:

实现输入要删除的学生学号,执行后就可以删除该学生所有信息。

该功能用到statusdelstudent(stu*s)删除记录的函数,先定义p为查找到要删除的结点指针,如果还没信息则显示添加,函数返回到Locate,否则通过while(r->

next!

=p)r=r—>

next;

r—>

next=p-〉next;

free(p);

确定要删除的项目。

(4)学生信息清单显示:

系统显示所有学生的信息情况,包括学生编号、学号、姓名、各科成绩、个人总成绩.这里用到显示函数实现输出链表中结点信息的功能.

(5)学生信息查询:

根据系统提示输入要查找的学生名字或学号回车后,即可以排列的形式显示已找到的学生信息记录,接着自动跳到主菜单。

用到status

findstudent(stu*s)查找函数。

(6)学生成绩计算:

利用allscore=mscore+escore+cscore求得。

(7)学生信息添加:

直接用用addstudent函数添加.

(8)学生成绩排序:

选择并执行该功能后,系统提示使按学号,各科成绩或总成绩排列,选择后系统自动按降序排列。

(9)系统退出:

其实这里只用到了一个exit(0);

3.5流程图

3。

6详细设计1。

函数原型

voidshowmenu()菜单函数

stu*Locate(stu*s,charfind[],intk)/*结点添加(插入)*/statusdelstudent(stu*s)/*删除记录*/voidshow(stu*s,intk)/*显示所有记录的*/voidshowid(stu*s)/*显示学号对应的姓名*/statuslist(stu*s,intk)/*排序*/statusaddstudent(stu*s)/*添加记录*/

空时停止并返回主菜单选择。

直接在输出数值时添加mscore+escore+cscore作为总成绩加到信息最后一列。

(4)show函数

为了能让用户输入字符串,依然是定义一个开关,此时的开关条件无最大值,添加信息时直接调用show函数即可实现学生信息的输入。

(5)printf函数

编写显示函数用来输出链表中结点信息,stu型指针r,接着r=*s初值为头指针,用printf方法输出存储学生信息,最while(r!

=NULL){?

}实现当表中有信息即不为空,就执行while中的内容,打印出学生的各个信息。

(6)delete函数

用来删除记录,先用if(!

s-〉next){printf("

hasnostudent!

\npleaseaddatfrist!

"

)验证学生信息是否为空,如果为空则输出“pleaseaddfirst”.如果不为空,先选择按学号删除或按姓名删除,然后调用函数stu*Locate(stu*s,charfind[],intk)查找要删除的记录。

然后用freep()执行记录清空.(7)insert函数

用来插入学生记录,定义二个指针为p和l,l为前驱,p为插入数据的位置。

如果遇到相同学号的则显示输入有重复并显示原来学号的信息。

如不然则用scnf和printf输入输出数据,并在运行结束后把指针置尾.(8)sort函数

根据不同的要求实现成绩从大到小排列,程序中采用的使选择法进行排序,排序过程中调用swap函数实现数据的排列。

这样就能按不同要求把数据排列了。

3.8程序调试与测试(结果分析)1.函数主界面

2.选择第一项实现添加数据如下

选择2进行修改编辑

4。

选择3进行删除成绩

5。

选择4进行排序显示成绩

6。

选择5进行查找成绩

7.选择6提供载入信息条数

8.选择7保存

9.选择0关闭

要保存选Y不想保存先N。

程序运用了结构体,链表,转换和选择法排序实现了删除,添加,信息载入,查询等功能.

(1)单链表查找算法的最好的时间复杂度为o

(1),最坏时间复杂度o(n),平均时间复杂度o(n);

空间复杂度为o

(1)。

(2)单链表插入算法时间复杂度o(n);

(3)系统基本上实现了小型学生管理系统的功能。

4。

总结

C语言使上学期教的,现在开始做这个课程设计刚开始有点仿偟,不知道何从下手,最后搬出书本有看了一下,网上查点资料,仔细阅读老师给的任务指导书,开始着手做这个学生成绩管理系统,其原因使该算法简便,程序贴近学生生活,该程序的目的使实现学生成绩的粗略管理。

设计过程经过了任务定义,逻辑设计、详细设计、程序编码、程序调试与测试、结果分析和撰写实验报告,最终系统地完成整个课程的设计。

该系统是小型管理系统,运行界面为DOS界面,始终存在不足,从这次设计

中我深刻的体会C设计的意义,我觉得编程除了麻烦也是一件有趣的事情。

[1]谭浩强。

C程序设计[M]北京:

清华大学出版社,2005。

292页-310页。

[2]苏仕华.数据结构课程设计[M]。

上海:

机械工业出版社,2004。

[3]谭浩强。

C程序设计题解与上机指导[M]北京:

清华大学出版社,2005。

#include<

stdio.h>

stdlib。

h〉//提供malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、

srand()、exit()/

#include〈string.h>

//字符串调用typedefintstatus;

intchange=0;

//信息是否改变typedefstructstudent{intnum;

//学号charname[20];

//姓名intmscore;

//数学成绩intcscore;

//c语言成绩intescore;

//英语成绩structstudent*next;

//定义指针}stu;

//定义对象stu

voidshowmenu(){

printf(”\n\t\t***listofstudent***"

);

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

printf("

\n\t\t*1:

addstudent*"

);

printf(”\n\t\t*2:

editstudent*”);

printf(”\n\t\t*3:

delstudent*”);

\n\t\t*4:

showstudent*"

printf(”\n\t\t*5:

findstudent*”);

\n\t\t*6:

loadstudent*"

while(r!

=NULL){

if(r-〉num==k)returnr;

r=r—〉next;

elseif(k==0){//按姓名查询

r=s->

if(strcmp(r-〉name,find)==0)returnr;

r=r—>

return0;

status_swap(stu*s1,stu*s2){//把一个对象的学生数据赋给另一个学生

s1->

num=s2—〉num;

//学号

strcpy(s1-〉name,s2—>

name);

//姓名

s1—>

mscore=s2->

mscore;

//数学成绩

cscore=s2—>

cscore;

//c语言成绩

s1-〉escore=s2—〉escore;

//英语成绩

statusswap(stu*s1,stu*s2){//实现两个学生信息的转换

stu*p;

if(!

(p=(stu*)malloc(sizeof(stu))))showerror(0);

_swap(p,s1);

_swap(s1,s2);

_swap(s2,p);

free(p);

//释放p所占的空间

statuslist(stu*s,intk){//采用选择法排序

stu*p,*p1,*p2;

p1=s—〉next;

while(p1){

p2=p1->

next;

while(p2){

if(k==1)if(p2—>

num〈p1—〉num)swap(p1,p2);

if(k==2)if(p2-〉mscore〉p1—>

mscore)swap(p1,p2);

if(k==3)if(p2—〉cscore>

p1—〉cscore)swap(p1,p2);

//c成绩

if(k==4)if(p2-〉escore>

p1-〉escore)swap(p1,p2);

if(k==5)if((p2—>

mscore+p2->

cscore+p2-〉escore

(p1-〉mscore+p1->

cscore+p1—>

escore))swap(p1,p2);

p2=p2—>

p1=p1->

statuseshow(stu*s){

show(s,0);

while(s—>

next){

s=s-〉next;

show(s,2);

}}

statusaddstudent(stu*s){

stu*p,*l;

intk;

while

(1){

l=s;

printf("

pleaseinputnum[0:

return]:

scanf(”%d"

&

k);

if(k==0)break;

while(l){

if((l—〉num)==k){

12//英语成绩;

//总分〉

the’%d’studentisRepeated!

\n”,k);

show(l,1);

return;

l=l—〉next;

if(!

(p=(stu*)malloc(sizeof(stu))))showerror(0);

input%dstudent:

name,mscore,cscore,escorelike[lucy808080]:

”,k);

scanf(”%s%d%d%d”,&

p->

name,&

mscore,&p->

cscore,&p->

escore);

p—>

num=k;

next=NULL;

if(s==NULL)s=p;

else{

while(s-〉next!

=NULL)s=s—〉next;

//将指针置于最末尾s->

next=p;

p=NULL;

change=1;

statuseditstudent(stu*s){//修改学生

intk=0;

while(k==0){

printf(”\npleaseinputeditnum[0:

showall]:

scanf("

%d”,&

if(k==0)showid(s);

while(s){

if((s->

num)==k){

\ninput[%d%s%d%d13%d]

student:

name,mscore,cscore,escore:

”,k,s—〉name,s—〉mscore,s—〉cscore,s—>

escore);

scanf(”%s%d%d%d"

&s—>

s—〉mscore,&s-〉cscore,&

s->

printf(”\nfinish!

\n”);

return;

s=s-〉next;

s)printf("

=====>

thestudent’%d'

isnotfind!

\n"

,k);

}

statusdelstudent(stu*s){//删除学生

intset,k;

stu*p,*r;

charfind[20];

next){

hasnostudent!

\npleaseaddatfrist!

”);

printf(”\n=====>

1delwithnum\n=====>

2delwithname\n”);

scanf("

%d”,&set);

if(set==1){

pleaseinputthenum:

”);

,&k);

p=Locate(s,"

num"

elseif(set==2){

inputthename:

%s”,find);

p=Locate(s,find,0);

charfind[20];

s—>

next){

printf(”hasnostudent!

\n=====>

2delwithname\n"

scanf(”%d"

&set);

if(set==1){

pleaseinputthenum:

%d"

k);

p=Locate(s,”num"

k);

%s"

find);

p=Locate(s,find,0);

else{

inputerror!

//return;

123456

if(p)show(p,1);

nofind!

statusloadstudent(stu*s){//载入文件信息

stu*r;

FILE*fp;

//文件指针

intcount=0;

charjian;

fp=fopen(”student。

stu”,"

rb"

if(fp==NULL){

printf(”\ndatefileisnotfind,buding?

(y/n)\n”);

%c”,&

jian);

if(jian==’y’||jian=='

Y’)fp=fopen("

student.stu”,"

wb"

elseshowerror

(1);

fileisfind,opening.。

.\n”);

while(!

feof(fp)){

r=(stu*)malloc(sizeof(stu));

if(fread(r,sizeof(stu),1,fp)){//将文件的内容放入接点中r->

next=NULL;

next=r;

s=r;

//将该接点挂入链中

count++;

fclose(fp);

//关闭文件

printf(”\n=====〉filish,%dreportisfound。

\n”,count);

statussavestudent(stu*s){//保存学生

FILE*fp;

intflag=1,count=0;

fp=fopen("

student。

stu"

”wb”);

if(fp==NULL)showerror

(1);

p=s—>

while(p){

if(fwrite(p,sizeof(stu),1,fp)==1){

p=p-〉next;

count++;

else{

flag=0;

break;

if(flag){

finish。

(%dreportissaved.)\n”,count);

change=0;

statusshowerror(intk){

switch(k){

case0:

printf(”\nMemoryFailure!

\npleaseanyexit!

getch();

exit(0);

break;

case1:

\nfileerror!

default:

getchar();

voidmain(){

stu*s;

//链表

intset;

charch;

s=(stu*)malloc(sizeof(stu));

s—〉next=NULL;

keykey

loadstudent(s);

//while

(1){

showmenu();

while

(1){printf(”\n”);

pleaseinputthemenu:

%d”,&

set);

if(set==0){

if(change==1){

thedatischanged,save?

(y/n)?

\n”);

%c"

ch);

if(ch==’y’||ch==’Y'

savestudent(s);

switch(set){

addstudent(s);

//增加学生

case2:

editstudent(s);

//修改学生

case3:

delstudent(s);

//删除学生

case4:

showstudent(s);

//查看学生信息

case5:

findstudent(s);

//查询学生

case6:

loadstudent(s);

//载入文件信息

case7:

//保存学生

default:

getchar();

//直接返回到主菜单的选择界面}

1.课程设计的目的

1.对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。

2.掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。

3.熟练掌握C语言的基本语法,灵活运用各种数据类型.

表达式,分块调试)和修改程序。

1.程序在运行时,均以菜单形式提供选择界面,并提供一定的数据安全

和提示具有良好的交互功能.2.设计中的每一个小功能均由子函数来完成

3.提前编制下次调试的程序,对于难点问题要积极查阅相关教材、资料,计划好每次上机的内,高效、独立地完成这次设计任务

4.在硬盘上建立自己的目录,将程序文件存储到该目录下,即有利于调试文件,又保证了文件的安全性。

3.课程设计报告内容3.1

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

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1