c语言课程设计报告学生证系统分解Word下载.docx
《c语言课程设计报告学生证系统分解Word下载.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告学生证系统分解Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
对于这个问题,可采用批量操作和指令操作的思路。
可以将所有的学生证信息存储在一个文件(txt格式)中,在对大量学生证数据的处理用到链表和文件处理等基本技术,并用两个函数实现文件读取和写入。
2.2系统各个功能模块详细设计
及功能模块之间关系设计(包括功能结构图等)
(1)添加模块(录入模块):
可以逐个录入学生信息,也可以设定录入人数,批量录入学生信息。
在输入学生信息时,可输入return返回,可随意输入指令进行功能切换。
其功能图如下图.
(2)搜索模块:
根据给出信息,可以是学号,名字或班级,搜索符合条件的某位学生或某些学生,并返回地址。
(3)修改模块:
通过地址找到该学生信息,然后进行修改。
(4)统计模块,统计学生总男女生人数;
某班男生人数,女生人数;
统计指定日子出生的学生;
统计与指定名字相同的学生;
(5)显示模块,显示学生证信息。
分为针对单人的详细显示和针对集体的行显示两种模式。
(6)删除模块,本模块有2种删除方式,分别是按学号删除和按班级名删除。
(7)指令模块,本模块负责辨认输入的为指令还是操作序号,并根据输入选择操作。
2.3数据结构的设计(文件等)
(1)学生证信息结构
描述学生证信息,并作为一整条记录存放在文件中。
typedefstructstud
{
charname[20];
charsex[8];
charsnumber[14];
chartime[12];
charid[20];
charcollege[24];
charmajor[20];
charclasses[40];
structstud*next;
}LNode,*LinkList;
LinkListp,q,m,n,c;
(2)链表
存储学生证信息,并作为一整条记录在程序中进行操作。
p=(LinkList)malloc(sizeof(LNode));
//头指针
q=p;
(3)文件
在程序开始前和结束后存储学生证信息
voidrewirte()//程序结束后将一切写进文件
voidload()//文件内容装载至链表
2.4界面设计
遵循简洁美观、方便使用的原则。
(1)首页:
用printf语句构造简单的界面,注重界面的简洁性。
(2)、录入界面
(3)、修改界面:
(4)删除界面
(5)学号查询
(6)班级查询
(7)其他
(8)指令
(9)统计班级男女人数
(10)统计同名
(11)统计同年同日出生
流程图如下:
3系统实现
基于系统需求分析与系统总体设计的结果,本系统采用开发平台:
CodeBlocks+MinGW+wxWidgets实现各模块的功能,下面将展现某些模块的录入操作的详细设计和实现过程。
录入模块:
(1)
(2)代码段片段
相关函数
charconsole()//控制台
录入:
voidentry()//录入
system("
cls"
);
char,op,i=1;
LinkListstd;
std=(LinkList)malloc(sizeof(LNode));
std->
next=NULL;
printf("
请分别输入学生的信息\n"
while(i<
9)
{
switch(i)
case1:
printf("
姓名(如:
王小明):
"
break;
case2:
性别(如:
男):
case3:
学号(如:
):
case4:
入学时间(如:
2013-09-01):
case5:
身份证号码(如:
case6:
学院(如:
case7:
专业(如:
case8:
班级(如:
}
op=console();
if(k==562||k==648||k==627||k==966||k==1164||k==1218||k==311||k==672||k==1189||k==735||k==840||k==839||k==836||k==1076||k==1161)
sw=1;
free(std);
return;
strcpy(std->
name,cl);
sex,cl);
snumber,cl);
time,cl);
id,cl);
college,cl);
major,cl);
classes,cl);
i++;
q->
next=std;
q=q->
next;
录入成功\n"
输入任意键以退出\n"
a=getchar();
}
4系统测试
模块测试:
测试各模块的测试
显示模块:
(1)输出单个学生学生证信息。
1、输入学号
2、预期结果:
3、输出结果:
4、结论:
运行正常。
(2)显示班级学生证信息
1、输入2013软件工程1班
3、
系统测试:
系统功能的完整测试
(1)系统测试1:
1、输入流程:
批量录入信息batchentry输入3后输入信息
信息如下:
根据学号输出信息,
根据班级输出信息,
2、预测结果:
3、实际结果:
5系统运行界面
1、运行界面1:
统计同年同日生的学生
2、运行界面2:
指令实现
6总结
怎么说呢,这次设计的并不难,要是只完成基本功能的话其实不用什么力气。
但在这次设计中呢,却陆陆续续地遇到小问题。
这些问题都得归因于自己整体设计时不够用心,未曾仔细地思考,又盲目地想做点新意,结果有一阵子一直停滞不前。
结果,最后还是静下心来梳理了一遍思路,做好前期准备,情况才好起来。
然后,感觉做这种课题真的非常好,题目分析、整体设计、模块分析......一整套做下来实在令人兴奋。
Debug过程既是无聊的也是有趣的。
能在程序设计中找到快乐实在不错。
这次设计已经完结了,但是我的路还有很长,离成为一个合格的程序员实在还有很远,不过,还有几年时间可以抢救一下,我觉得我还有救的
7参考文献
《C语言程序设计(第二版)》
附录:
全代码:
#include<
stdio.h>
math.h>
string.h>
stdlib.h>
malloc.h>
#defineTRUE1
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineSTACK_INIT_SIZE100
charneed='
'
ne='
\n'
;
intk=0,sw=0;
charcl[80];
charconsole()
inti=0;
k=0;
gets(cl);
if(cl[0]<
='
9'
&
cl[0]>
1'
!
cl[1])returncl[0];
else
while(cl[i])
k=k+cl[i];
return'
0'
voidshell()
学生证管理系统\n"
==============================\n"
1、学生证信息录入\n"
2、学生证信息修改\n"
3、学生证信息删除\n"
4、显示学生的学生证信息\n"
5、显示班级所有学生学生证信息\n"
6、其他\n"
7、说明书\n"
8、结束\n"
请输入操作序号或正确指令\n"
voidshell_II()
/*system("
*/
请选择你想修改的信息\n"
1、姓名\n"
2、性别\n"
3、学号\n"
4、入学时间\n"
5、身份证号码\n"
6、学院\n"
7、专业\n"
8、班级\n"
9、返回\n"
voidshell_III()
请选择你想实现的统计功能\n"
1、统计某个班的男女人数\n"
2、统计已录入学生之间的男女人数\n"
3、统计并显示已录入学生中同名的学生\n"
4、统计同年同日出生同学\n"
5、批量录入\n"
6、班级删除\n"
voidrewirte()//罚抄
{//程序结束后将一切写进文件
FILE*fp;
fp=fopen("
date.txt"
"
w+"
p=p->
while(p)
fputs(p->
name,fp);
fputc(need,fp);
sex,fp);
snumber,fp);
time,fp);
id,fp);
college,fp);
major,fp);
classes,fp);
fputc(ne,fp);
free(q);
voidload()
{//文件内容装载至链表
charch,e[80];
LinkListone;
inti=1,l=0;
a+"
while(!
feof(fp))
i=1;
l=0;
one=(LinkList)malloc(sizeof(LNode));
ch=fgetc(fp);
if(feof(fp))break;
while(ch!
=ne)
)
{e[l++]=ch;
e[l]='
\0'
strcpy(one->
name,e);
sex,e);
snumber,e);
time,e);
id,e);
college,e);
major,e);
classes,e);
default:
l=0;
i++;
next=one;
fclose(fp);
voidpri(LinkListl)
姓名:
puts(l->
name);
\n"
性别:
sex);
学号:
snumber);
入学时间:
time);
身份证号码:
id);
学院:
college);
专业:
major);
班级:
classes);
voidpri_II(LinkListl)
%s%s%s%s%s%s%s%s\n"
l->
name,l->
sex,l->
snumber,l->
time,l->
id,l->
college,l->
major,l->
voidsearch()//根据学号找人
charop;
m=n=p->
while(n)
if(strcmp(cl,n->
snumber)==0)
break;
m=n;
n=n->
voidsearch_II()//根据班级找人
请输入要查询的班级(如2013软件工程1班):
n=p->
classes)==0)
pri_II(n);
n=n->
if(i==0)printf("
找不到要查询的班级\n"
440781************):
voidbatchentry()//批量录入
inti=0,num=0;
请输入录入人数\n"
num+=cl[i]-'
=num)
entry();
if(sw==1)return;
voidclassdelete()//班级删除
请输入要删除的班级:
if(k==562||k==648||k==627||k==966||k==1164||k==1218||k==311||k==672||k==1189||k==735||k==840||k==839||k==836||k==1076||k==1161||k==1161)
m=p;
m->
next=n->
free(n);
n=m->
else{m=n;
voidstatistical_I()//统计某个班的男女人数
inti=0,boy=0,girl=0,sum=0;
请输入你所要查询的