高级C语言课程设计说明书计算机等级考试管理系统.docx

上传人:b****8 文档编号:11103290 上传时间:2023-02-25 格式:DOCX 页数:49 大小:131.78KB
下载 相关 举报
高级C语言课程设计说明书计算机等级考试管理系统.docx_第1页
第1页 / 共49页
高级C语言课程设计说明书计算机等级考试管理系统.docx_第2页
第2页 / 共49页
高级C语言课程设计说明书计算机等级考试管理系统.docx_第3页
第3页 / 共49页
高级C语言课程设计说明书计算机等级考试管理系统.docx_第4页
第4页 / 共49页
高级C语言课程设计说明书计算机等级考试管理系统.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

高级C语言课程设计说明书计算机等级考试管理系统.docx

《高级C语言课程设计说明书计算机等级考试管理系统.docx》由会员分享,可在线阅读,更多相关《高级C语言课程设计说明书计算机等级考试管理系统.docx(49页珍藏版)》请在冰豆网上搜索。

高级C语言课程设计说明书计算机等级考试管理系统.docx

高级C语言课程设计说明书计算机等级考试管理系统

《高级C语言程序设计》课程设计

说明书

设计题目:

计算机等级考试管理系统

摘要

随着电子信息行业的快速发展以及科学技术的不断进步,各类工程的需求,社会各界的应用的需要,计算机作为高智能,全自动,高效率的工具,在现实社会中具有不可估量的价值。

本程序是基于Turbo.C2.0环境的计算机等级考试系统,主要用于系统管理考生的相关信息,为广大教育工作者提供了极大的方便,具有一定的实用价值。

设计任务

一.题目:

计算机等级考试管理系统

二.设计要求:

近年来,参加计算机考试的人员日益增多,用计算机来降低工作量成为了一种迫切需求,为此目的编写软件

基本功能:

      报名信息维护

      等级分类

      等级查询

      身份证号查询

      姓名查询

      学号查询

三.时间安排:

1>第一周,完成程序需求分析的报告,分析程序的使用价值,确定设计方向,明确设计目的,理清设计思路,完成程序框架的设计。

2>第二周,设计算法。

完成程序中相关算法的设计,分析算法的构成及设计思路,将方法具体化,完成相关模块程序的实现。

3>第三周,完成程序的实现,对已有的程序进行局部的调试,找出错误并改正。

将所有的模块集合,对整个程序系统进行测试,记录测试的结果,逐步将程序进行优化设计。

完成课程设计说明书的编写,并在附录里添加源程序,将说明书以文档的形式打印,并装订成册。

四.答辩演示:

每位同学,将自己的说明书和电子档源程序带上,于2011-11-23日在理科楼L-2413进行答辩演示,介绍自己软件的功能,操作方法,优点缺点,并能初步评估软件的实用价值。

在答辩完成以后,每位同学需要把自己的电子档源程序进行打包上传到相应的地址,以便调用。

第一章.

总体设计:

1.1模块划分……………………………………………………………1

1.2模块说明……………………………………………………………3

第二章.

详细设计:

2.1需求分析……………………………………………………………15

2.1.1系统简介…………………………………………15

2.1.2功能详述…………………………………………15

2.1.3开发环境…………………………………………15

2.1.4运行环境…………………………………………15

2.2函数说明……………………………………………………………16

2.3用户使用说明………………………………………………………16

2.4测试结果

2.4.1主控模块………………………………………17

2.4.2数据输入………………………………………18

第三章.

设计感悟:

3.1小结………………………………………………………………21

3.2参考文献…………………………………………………………22

第四章.

附录<源程序>:

4.1源程序……………………………………………………………22

 

第一章

1.1模块化分

本程序系统从大的方向分为数据模块和代码模块。

数据模块用一个单链表来存储数据,然后用一个指针域将链表中的数据存放到磁盘文件中进行保存。

代码模块主要用于程序相关功能的实现。

以下分模块介绍:

数据模块,单链表如下:

typedefstructstudent

{

charnum[9];

charname[13];

charrang[2];

charcollege[15];

intttscore;

intopscore;

charsex[2];

charID[19];

};

用typedef定义结构体类型数据,用以存放考生的相关信息。

其中,num[]存放考生的考号,name[]存放考生的姓名,rang[]存放考生的等级,college[]存放考生的学校名,ttscore存放考生的笔试成绩,opscore存放考生的机试成绩,sex[]存放考生的性别,ID[]存放考生的身份证号码。

typedefstructnode

{

structstudentdata;/*数据域*/

structnode*next;/*指针域*/

}NODE,*link;

该链表将上一个链表作为其元素,构成其数据域,然后定义自身机构提类型,作为指针域,以便下文查找链表的位置。

NODE为结构体类型变量,ling为结构体类型指针。

代码模块,用不同的函数完成不同的功能,并能通过函数的有机结合,完成复杂的输入,查询,删改等功能。

主要分为以下几个大块:

1>添加信息voidadd(),用于新增考生记录。

2>删除信息voiddel(),用于删除已有的考生记录。

3>查找信息voidqur(),用于在文件中查找相关字段的记录。

4>修改信息voidmodify(),用于修改文件中已有的记录。

5>保存信息voidsave(),用于存储新增加的记录。

6>显示信息voiddisp(),用于显示已有的考生记录。

7>显示错误voidwrong(),当输入的不是规定的字段时,或操作失败时,系统提示出错情况,以及出错原因,提示用户进行修改。

8>显示查找失败voidNofind(),当进行查找或者修改操作时,系统会根据用户输入的字段进行查找,确定相应的记录位置,当没有找到相应的记录时,输出查找失败信息,并提醒用户进行校正。

9>标准字符输入函数voidstringinput(char*t,intlens,char*notice),输入相应的字符串,并进行检验,如果输入有误,则输出错误原因,提示用户进行修改。

10>标准数字输入函数intnumberinput(char*choice),输入数字字符串,并进行检验,若果有错,则输出出错原因,提示用户进行修改。

11>输出数据函数voidprintdata(NODE*pp),将结构体数据进行整体输出。

12>输出表头函数voidprintheader(),将结构体数据,即考生记录按类似表格的形式进行整体规划分栏输出。

13>确定记录位置NODE*Locate(linkL,charfindmess[],charnameornum[],将用户输入的信息进行相应的处理,找到相应的位置,对指针进行定位查找。

14>主控函数voidmain(),用于对整个程序进行操作的控制。

以下是函数结构简图:

 

1.2模块说明

主控函数viodmain(),以下是其代码:

voidmain()

{

linkL;

FILE*fp;

intselect;

charch;

intcount=0;

NODE*p,*r;

L=(NODE*)malloc(sizeof(NODE));

if(!

L)

{

printf("\nAllocatememoryfailure");/*如果没有申请到,打印提示信息*/

return;

}

L->next=NULL;

r=L;

fp=fopen("e:

\\wintc\\student","ab+");/*以追加方式打开一个二进制文件,可读可写,若文件不存在,会创建此文件*/

if(fp==NULL)

{

printf("\n====>Cannotopenthisfile!

\n");

exit(0);

}

while(!

feof(fp))

{

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

if(!

p)

{

printf("Memorymallocfailure!

\n");

exit(0);

}

if(fread(p,sizeof(NODE),1,fp)==1)/*一次从文件中读取一个学生的信息*/

{

p->next=NULL;/*每次让动态指针指向0*/

r->next=p;/*连接节点*/

r=p;/*每次让r指向下一个文件头*/

count++;

}

fclose(fp);

printf("\n==>Openfilesuccess,thetotlenumberis:

%d\n",count);

menu();

while(L)

{

system("cls");

menu();

p=r;

printf("\n===>>Pleaseenteryourchoice(0-6):

");

scanf("%d",&select);

if(select==0)

{

if(saveflag==1)/*若对链表的数据有修改且未进行存盘,则标志为1*/

{getchar();

printf("\n===>Whethertosavethemodifiedrecordtofile?

(y/n)");

scanf("%c",&ch);

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

save(L);

}

printf("===>Thankyouforusingthisprogram!

!

");

getchar();

exit(0);

}

switch(select)

{

case1:

add(L);break;/*增加学生信息*/

case2:

del(L);break;/*删除学生信息*/

case3:

qur(L);break;/*查询学生信息*/

case4:

modify(L);break;/*修改学生信息*/

case5:

save(L);break;/*保存学生信息*/

case6:

system("cls");disp(L);break;/*显示学生信息*/

default:

wrong();getchar();break;/*按键有误*/

}

}

}

}

首先,以计算机动态分配的方式,分配一个结构体类型的数据空间,然后,打开数据文件,将两个结构联系起来,并设置进入和退出方式。

进而,进入双while()主循环,首先,动态分配数据存储巍峨年结构体,然后,设置读取方式,,每次从文件中读取一个考生记录,并且计数,然后输出已有的考生记录。

下一步,进入内部while循环,显示菜单,提示用户进行合理的操作。

接着,用switch()开关设置菜单操作响应,并设置出错响应。

以下是六个功能函数的简介:

输入记录函数add()

voidadd(linkL)

{

NODE*p,*r,*s;

charch,num[9];intflag=0;

r=L;

s=L->next;

system("cls");

disp(L);

while(r->next!

=NULL)

r=r->next;/*将r移至表的最尾部,准备添加数据*/

while(L)

{

while(L)

{

stringinput(num,9,"Inputsortnumber(Press'0'toreturnmenu):

");

if(strcmp(num,"0")==0)/*输入为0则返回主界面*/

{return;}

s=L->next;

while(s)

{

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

{flag=1;break;}

s=s->next;

}

if(flag==1)

{

printf("===>Thenumber%sisexisting,tryagain?

(y/n):

",num);

scanf("%c",&ch);

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

continue;

elsereturn;

}

else{break;}

}

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

if(!

p)

{

printf("\nAllocatememoryfailure!

\n");

return;

}

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

stringinput(p->data.name,13,"Name:

");

stringinput(p->data.sex,2,"Sex:

");

stringinput(p->data.college,15,"college:

");

stringinput(p->data.ID,19,"IDnumber:

");

p->data.ttscore=numberinput("Textscorescore[0-100]:

");

p->data.opscore=numberinput("Operatescorescore[0-100]:

");

stringinput(p->data.rang,2,"Range:

");

p->next=NULL;/*表明这是链表的尾部节点*/

r->next=p;/*将新建节点加入链表尾部中*/

r=p;

saveflag=1;

}

return;

}

应用单链表结构,在内存空间动态存储数据。

首先对输入的数据进行检测,看是否已经存在,然后,进行数据的输入。

用结构体指针进行数据的存储操作,每次输入一个数据,将其用结构体元素的形态存入结构体,然后整体存入文件。

查找数据函数voidqur()

voidqur(linkL)

{

intselect;

charsearchinput[20];

NODE*p;

if(!

L->next)

{system("cls");

printf("\n==>Nostudentrecord!

\n");

getchar();

return;

}

system("cls");

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

printf("\n===>3按身份证号查找\n");

printf("pleasechoice:

");

scanf("%d",&select);

if(select==1)

{

stringinput(searchinput,9,"Inputtheexistingsortnumber:

");

p=Locate(L,searchinput,"num");

if(p)

{

printheader();

printdata(p);

printf(END);

printf("Pressanykeytoreturn");

getchar();

}

elseNofind();getchar();

}

elseif(select==2)

{

stringinput(searchinput,13,"Inputtheexistingname:

");

p=Locate(L,searchinput,"name");

if(p)

{

printheader();

printdata(p);

printf(END);

printf("Pressanykeytoreturn");

getchar();

}

elseNofind();getchar();

}

elseif(select==3)

{

stringinput(searchinput,19,"InputtheexistingID:

");

p=Locate(L,searchinput,"ID");

if(p)

{

printheader();

printdata(p);

printf(END);

printf("Pressanykeytoreturn");

getchar();

}

elseNofind();getchar();

}

elsewrong();getchar();

}

根据标准输入函数输入的数据,进行检测并设置不同的查询方式,用户可以根据喜好,进行相应的选择,分为考号查询,身份证号查询,姓名查询。

如果找到相应的记录,以表格的形式输出数据,没找到,则输出错误信息。

删除记录函数voiddel()

voiddel(linkL)

{

intsel;

NODE*p,*r;

charfindmess[20];

if(!

L->next)

{

system("cls");

printf("==>Nostudentrecord!

\n");

getchar();return;

}

system("cls");

disp(L);

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

printf("\n===>3按身份证号删除\n");

printf("Pleaseselect:

");

scanf("%d",&sel);

if(sel==1)

{

stringinput(findmess,9,"Inputthesortnumber:

");

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

if(p)

{

r=L;

while(r->next!

=p)

r=r->next;

r->next=p->next;/*将p所指的节点从链表中删除*/

free(p);

printf("\n===>Deletesuccess!

\n");

getchar();saveflag=1;

}

elseNofind();getchar();

}

elseif(sel==2)

{

stringinput(findmess,13,"Inputthestudentname:

");

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

if(p)

{

r=L;

while(r->next!

=p)

r=r->next;

r->next=p->next;/*将p所指的节点从链表中删除*/

free(p);

printf("\n===>Deletesuccess!

\n");

getchar();saveflag=1;

}

elseNofind();getchar();

}

if(sel==3)

{

stringinput(findmess,19,"InputthestudentIDnumber:

");

p=Locate(L,findmess,"ID");

if(p)

{

r=L;

while(r->next!

=p)

r=r->next;

r->next=p->next;/*将p所指的节点从链表中删除*/

free(p);

printf("\n===>Deletesuccess!

\n");

getchar();saveflag=1;

}

elseNofind();getchar();

}

elsewrong();getchar();

}

本函数与查找函数相似,提供了姓名,考号,身份证号三种查询方式,用户可自由选择。

系统将根据用户的选择进行不同的检测,找到记录后,提示用户确定后进行记录的删除操作。

修改记录函数voidmodify()

voidmodify(linkL)

{

NODE*p;

charfindmess[20];

if(!

L->next)

{

system("cls");

printf("\n==>Nostudentrecord!

\n");

getchar();

return;

}

system("cls");

printf("Modifystudentrecord");

disp(L);

stringinput(findmess,9,"===>Inputtheexistingstudentnumber:

");

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

if(!

p){printf("===>Thenumberyouputisnotexisting!

\n");getchar();return;}

if(p)

{

printf("Number:

%s,\n",p->data.num);

printf("Name:

%s,\n",p->data.name);

stringinput(p->data.name,13,"Inputnewname:

");

stringinput(p->data.num,9,"Inputsortnumber:

");

stringinput(p->data.rang,2,"Inputthefinallrang:

");

stringinput(p->data.ID,19,"InputtheIDnumber:

");

stringinput(p->data.college,15,"Inputthecollegename:

");

stringinput(p->data.sex,2,"Inputthesex:

");

printf("\nTheoriginaltextscorescore:

%d,",p->data.ttscore);

printf("\nTheoriginalOperatescorescore:

%d,\n",p->data.opscore);

p->data.ttscore=numberinput("Thethenewtextscoreis:

");

p->data.opscore=numberinput("Thethenewoperatescoreis:

");

printf("\n==>Modifysuccess!

\n");

disp(L);

saveflag=1;

}

else

Nofind();getchar();

}

修改记录操作被选中时,系统先提示用户输入相应的字段,系统根据用户提供的字段进行检测,找到记录后,输出原有的记录,然后让用户自行修改记录,完成后返回到菜单。

如果没找到相应的记录,则输出错误信息。

保存新纪录函数voidsave(linkL)

voidsave(linkL)

{

FILE*fp;NODE*p;

intcount=0;

fp=fopen("e:

\\wintc\\student","wb");

if(fp==NULL)

{

printf("==

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

当前位置:首页 > 教学研究 > 教学案例设计

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

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