学籍管理系统C语言课程设计华丽版+详细注释.docx

上传人:b****9 文档编号:25447781 上传时间:2023-06-08 格式:DOCX 页数:33 大小:282.08KB
下载 相关 举报
学籍管理系统C语言课程设计华丽版+详细注释.docx_第1页
第1页 / 共33页
学籍管理系统C语言课程设计华丽版+详细注释.docx_第2页
第2页 / 共33页
学籍管理系统C语言课程设计华丽版+详细注释.docx_第3页
第3页 / 共33页
学籍管理系统C语言课程设计华丽版+详细注释.docx_第4页
第4页 / 共33页
学籍管理系统C语言课程设计华丽版+详细注释.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

学籍管理系统C语言课程设计华丽版+详细注释.docx

《学籍管理系统C语言课程设计华丽版+详细注释.docx》由会员分享,可在线阅读,更多相关《学籍管理系统C语言课程设计华丽版+详细注释.docx(33页珍藏版)》请在冰豆网上搜索。

学籍管理系统C语言课程设计华丽版+详细注释.docx

学籍管理系统C语言课程设计华丽版+详细注释

实验题目:

学籍管理系统

一、实验目的

综合应用所学的C语言程序设计知识,自行设计并实现一个较为完整的小型管理信息系统。

通过系统分析、系统设计、编程实现,写实验报告等环节,初步掌握软件系统的设计方法和步骤,提高灵活运用程序语言进行软件开发的技能,提高程序设计水平和分析问题、解决问题的能力。

二、实验内容

1):

熟悉C语言的开发环境,按照给定的上机步骤练习完成;

2):

熟悉C程序的编辑,编译,链接和运行的过程。

3):

编译一个应用系统程序,形成一个软件系统。

三、详细设计及运行结果

1、算法设计

学籍管理系统程序采用了结构化程序设计的思想,将程序分解成许多模块,再由主函数调用这些模块,实现不同的功能。

1、学生信息结构体:

储存学生信息。

2、主菜单模块:

通过利用输出函数显示输出主菜单信息。

3、提示错误信息模块:

通过利用输出函数输出提示错误信息。

4、提示没有找到模块:

通过利用输出函数输出提示没有找到该学生。

5、输出中文、英文模块:

通过利用输出函数输出中文提示及学生数据。

6、定位模块:

定位连表中符要求合的接点,并返回该指针。

7、增加学生信息模块:

通过指针的不断后移逐个接受学生信息并将学生信息付给相应变量。

8、查询学生信息模块:

根据用户选择按学号或按姓名查询,分别按学号或姓名逐个比较输入的数据与结构体中的数据,有匹配的则输出,没有则提示没有找到。

9、删除信息模块:

根据用户选择按学号或按姓名删除,分别比对输入数据和结构体中的数据,有匹配的则删除,没有则提示无信息可删。

10、修改信息模块:

通过用户输入的学号找到相应学生,然后逐项修改学生信息,否则提示无此学生。

11、显示信息模块:

将学生信息输出。

12、保存信息模块:

将接受的结构体信息利用指针存入文件中。

13、排序模块:

按照学生的最高分进行排序,输出。

14、统计学生信息模块:

逐项比较相邻两项的成绩信息,得到每项最大值,并输出统计结果。

15、主函数:

通过调用各模块来实现学生信息的管理。

 

2、模块图设计

总分

3、流程图设计

 

1、主函数

2、增加学生信息模块:

3删除学生信息

4.查询学生信息

4、修改学生信息

6、显示学生信息

7、保存学生信息

8.按总分排序

9、统计学生最高分

四、调试情况,设计技巧及体会

1、本系统在VC6下编译调试通过,可顺利运行,各项功能达到设计要求

本系统采用分模块调试的方法进行编译,即完成一个函数功能模块就编译一个功能模块,最后再进行整体编译并生成可执行文件honest.exe。

在调试过程中主要碰到以下问题:

(1)输入函数中的取地址符即“&”不能正确使用,导致程序在输入数据时发生错误。

(2)在比较两个字符串时不能正确使用“strcmp”函数,导致比较结果不能输出。

(3)在应用指针时没有注意头结点中的数据域中是不存放数据,导致指针指向错误。

2、在这次课程设计中我充分体会到C语言作为一门编程的基本语言它的精妙。

通过这次课程设计使我了解到我有很多的不足,在程序调试的时候常常会因为几个错误而弄得心烦,这说明我对知识的掌握还不够牢,在程序设计的过程中也暴露出了我的诸多弊端,借这次课程设计的机会我会认真的加以改正,多多看书多去图书馆学习,同时应该增强自己的实践能力,为以后的学习打下坚实的基础。

五、源程序清单(略,详见电子版实验报告)

#include"stdio.h"

#include"conio.h"

#include"stdlib.h"/*包含后面使用的exit等函数*/

#include"string.h"/*包含号面使用的strcmp等函数*/

inthavesave=0;/*全集变量*/

structstudent

{

charnum[10];/*学号*/

charname[18];

charsex[3];

intclanguage;

intmath;

intenglish;

inttotle;

intaverage;

};

typedefstructnode/*使用typedef语句,简化程序后续声明定义的键盘输入*/

{

structstudentdata;

structnode*next;

}Node,*Link;

voidmenu()

{

printf("㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣\n");

printf("◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎\n");

printf("◎◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◎\n");

printf("◎◆◇◎\n");

printf("◎◆◇◎\n");

printf("◎◆\t1添加学生资料\t\t\t\t\t2删除学生资料◇◎\n");

printf("◎◆◇◎\n");

printf("◎◆\t3查询学生资料\t\t\t\t\t4修改学生资料◇◎\n");

printf("◎◆◇◎\n");

printf("◎◆\t5保存学生资料\t\t\t\t\t6统计最高分◇◎\n");

printf("◎◆◇◎\n");

printf("◎◆\t7按总分排名\t\t\t\t\t8打印学生成绩◇◎\n");

printf("◎◆◇◎\n");

printf("◎◆\t9帮助信息\t\t\t\t\t0退出系统◇◎\n");

printf("◎◆◇◎\n");

printf("◎◆◇◎\n");

printf("◎◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◎\n");

printf("◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎\n");

printf("\n");

printf("㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣\n");

}

voidprint_san()

{

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

}

voidWrong()

{

printf("\n=====>提示:

输入错误!

\n");

}

voidNofind()

{

printf("\n=====>提示:

没有找到该学生!

\n");

}

voidprintchinese()/*本函数用于输出中文*/

{

printf("\t学号\t姓名性别英语成绩数学成绩C语言成绩总分平均分\n");

}

voidprintenglish(Node*p)/*本函数用于输出英文*/

{

printf("\t%-9s%s\t%s\t%d\t%d\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.english,p->data.math,p->data.clanguage,p->data.totle,p->data.average);

}

voidprinthelp()

{

printf("该程序为用C语言编写的学生管理程序,第一次进入该程序需要创建学生数据\n");

printf("以后进入可根据菜单栏显示实现各项功能,系统默认保存文件位置为D:

/学生管理\n");

printf("按任意键返回");

printf("\n");

getch();

}

Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位链表中符合要求的结点,并返回该指针*/

{

Node*r;

if(strcmp(nameornum,"num")==0)/*按学号查询*/

{

r=l->next;

while(r!

=NULL)

{

if(strcmp(r->data.num,findmess)==0)

returnr;

r=r->next;

}

}

elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/

{

r=l->next;

while(r!

=NULL)

{

if(strcmp(r->data.name,findmess)==0)

returnr;

r=r->next;

}

}

return0;

}

voidAdd(Linkl)/*增加学生*/

{

Node*p,*r,*s;

charnum[10];

r=l;

s=l->next;

while(r->next!

=NULL)

r=r->next;/*将指针置于最末尾*/

while

(1)

{

printf("请你输入学号(以'0'返回上一级菜单:

)");

scanf("%s",num);

if(strcmp(num,"0")==0)

break;

while(s)

{

if(strcmp(s->data.num,num)==0)

{

printf("=====>提示:

学号为'%s'的学生已经存在,若要修改请你选择'4修改'!

\n",num);

print_san();

printchinese();

printenglish(s);

print_san();

printf("\n");

return;

}

s=s->next;

}

p=(Node*)malloc(sizeof(Node));

strcpy(p->data.num,num);

printf("请你输入姓名:

");

scanf("%s",p->data.name);

getchar();

printf("请你输入性别:

");

scanf("%s",p->data.sex);

getchar();

printf("请你输入c语言成绩:

");

scanf("%d",&p->data.clanguage);

getchar();

printf("请你输入数学成绩:

");

scanf("%d",&p->data.math);

getchar();

printf("请你输入英语成绩:

");

scanf("%d",&p->data.english);

getchar();

p->data.totle=p->data.english+p->data.clanguage+p->data.math;

p->data.average=p->data.totle/3;

/*信息输入已经完成*/

p->next=NULL;

r->next=p;

r=p;

havesave=1;

}

}

voidSeek(Linkl)/*查询学生*/

{

intsel;

charfindmess[20];

Node*p;

if(!

l->next)

{

printf("\n=====>提示:

没有资料可以查询!

\n");

return;

 

}

printf("\n=====>1按学号查找\n=====>2按姓名查找\n");

scanf("%d",&sel);

if(sel==1)/*学号*/

{

printf("请你输入要查找的学号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

printf("\t\t\t\t查找结果\n");

print_san();

printf("\n");

printchinese();

printenglish(p);

printf("\n");

print_san();

printf("按任意键返回");

getch();

}

else

Nofind();

}

elseif(sel==2)/*姓名*/

{

printf("请您输入要查找的姓名:

");

scanf("%s",findmess);

p=Locate(l,findmess,"name");

if(p)

{

printf("\t\t\t\t查找结果\n");

print_san();

printf("\n");

printchinese();

printenglish(p);

printf("\n");

print_san();

printf("按任意键返回");

getch();

}

else

Nofind();

}

else

Wrong();

}

voidDel(Linkl)/*删除*/

{

intsel;

Node*p,*r;

charfindmess[20];

if(!

l->next)

{

printf("\n=====>提示:

没有资料可以删除!

\n");

return;

}

printf("\n=====>1按学号删除\n=====>2按姓名删除\n");

scanf("%d",&sel);

if(sel==1)

{

printf("请您输入要删除的学号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

r=l;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("\n=====>提示:

该学生已经成功删除!

\n");

havesave=1;

}

else

Nofind();

}

elseif(sel==2)

{

printf("请你输入要删除的姓名:

");

scanf("%s",findmess);

p=Locate(l,findmess,"name");

if(p)

{

r=l;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("\n=====>提示:

该学生已经成功删除!

\n");

havesave=1;

}

else

Nofind();

}

else

Wrong();

}

voidModify(Linkl)

{

Node*p;

charfindmess[20];

if(!

l->next)

{

printf("\n=====>提示:

没有资料可以修改!

\n");

return;

}

printf("请您输入要修改的学生学号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

printf("请你输入新学号(原来是%s):

",p->data.num);

scanf("%s",p->data.num);

printf("请你输入新姓名(原来是%s):

",p->data.name);

scanf("%s",p->data.name);

getchar();

printf("请你输入新性别(原来是%s):

",p->data.sex);

scanf("%s",p->data.sex);

printf("请你输入新的c语言成绩(原来是%d分):

",p->data.clanguage);

scanf("%d",&p->data.clanguage);

getchar();

printf("请你输入新的数学成绩(原来是%d分):

",p->data.math);

getchar();

scanf("%d",&p->data.math);

printf("请你输入新的英语成绩(原来是%d分):

",p->data.english);

scanf("%d",&p->data.english);

p->data.totle=p->data.english+p->data.clanguage+p->data.math;

p->data.average=p->data.totle/3;

printf("\n=====>提示:

资料修改成功!

\n");

havesave=1;

}

else

Nofind();

}

 

voidScoreone(Linkl)

{

Node*pm,*pe,*pc,*pt,*pa;/*用于指向分数最高的接点*/

Node*r=l->next;

if(!

r)

{

printf("\n=====>提示:

没有资料可以统计!

\n");

return;

}

pm=pe=pc=pt=pa=r;

while(r!

=NULL)

{

if(r->data.clanguage>=pc->data.clanguage)

pc=r;

if(r->data.math>=pm->data.math)

pm=r;

if(r->data.english>=pe->data.english)

pe=r;

if(r->data.totle>=pt->data.totle)

pt=r;

if(r->data.average>=pa->data.average)

pa=r;

 

r=r->next;

}

printf("------------------------------统计结果--------------------------------\n");

printf("总分最高者:

\t%s\t%s\t%d分\n",pt->data.num,pt->data.name,pt->data.totle);

printf("平均分最高者:

\t%s\t%s\t%d分\n",pa->data.num,pa->data.name,pa->data.average);

printf("英语最高者:

\t%s\t%s\t%d分\n",pe->data.num,pe->data.name,pe->data.english);

printf("数学最高者:

\t%s\t%s\t%d分\n",pm->data.num,pm->data.name,pm->data.math);

printf("c语言最高者:

\t%s\t%s\t%d分\n",pc->data.num,pc->data.name,pc->data.clanguage);

print_san();

printf("按任意键返回\n");

getch();

}

voidScoretow(Linkl)

{

Linkll;

Node*p,*rr,*s;

ll=(Link)malloc(sizeof(Node));/*用于做新的连表*/

ll->next=NULL;

if(l->next==NULL)

{

printf("\n=====>提示:

没有资料可以排序!

\n");

return;

}

p=l->next;

while(p)

{

s=(Node*)malloc(sizeof(Node));/*新建接点用于保存信息*/

s->data=p->data;

s->next=NULL;

rr=ll;

while(rr->next!

=NULL&&rr->next->data.totle>=p->data.totle)

rr=rr->next;

if(rr->next==NULL)

rr->next=s;

else

{

s->next=rr->next;

rr->next=s;

}

p=p->next;

}

free(l);

l->next=ll->next;

printf("\n=====>提示:

排序已经完成!

\n");

}

voidprintscore(Linkl)//打印成绩信息

{

Node*p;

p=l;

if(l!

=NULL)

{

printf("\n全部成绩为:

\n\n");

printf("学号\t姓名\t数学\t英语\tC语言\t平均分\t总分\n\n");

p=p->next;

do

{

printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.math,p->data.english,p->data.clanguage,p->data.average,p->data.totle);

p=p->next;

}while(p!

=NULL);

printf("\n");

printf("按任意键返回");

printf("\n");

getch();

}

else

printf("\n目前数据为空,还没有任何信息,请先创建成绩信息!

\n\n");

}

voidSave(Linkl)

{

FILE*fp;

Node*p;

intflag=1,count=0;

fp=fopen("D:

\\学生管理","wb");

if(fp==NULL)

{

printf("\n=====>提示:

重新打开文件时发生错误!

\n");

exit

(1);

}

p=l->next;

while(p)

{

if(fwrite(p,sizeof(Node),1,fp)==1)

{

p=p->next;

count++;

}

else

{

flag=0;

break;

}

}

if(flag)

{

printf("\n=====>提示:

文件保存成功.(有%d条记录已经保存.)\n",count);

havesave=0;

}

fclose(fp);

}

voidmain()

{

Linkl;/*连表*/

FILE*fp;/*文件指针*/

intsel;

charc;

charchji;

intcount=0;

Node*p,*r;

printf("\t\t\t\t学生成绩管理系统\n\t\t\t\t------西安邮电学院微电子0901李欢(17号)\n");

l=(Node*)malloc(sizeof(Node));

l->next=NULL;

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

当前位置:首页 > 求职职场

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

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