C语言课程设计身份证管理系统.docx
《C语言课程设计身份证管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计身份证管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
![C语言课程设计身份证管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/30/9e114856-3e2d-46bc-95c3-51c02b476431/9e114856-3e2d-46bc-95c3-51c02b4764311.gif)
C语言课程设计身份证管理系统
《身份证管理系统》
课程设计报告
题目
身份证管理系统
学号
姓名
年级专业
09级电子信息工程
(2)班
指导教师
完成日期
2010
年
6
月
28
日
一、课程设计的目的
进一步掌握和利用C语言进行程设计的能力,理解和运用结构化程设计的思想和方法,熟练掌握条件语句、循环、数组、结构体、函数操作,初步掌握开发一个小型实用系统的基本方法,学会高度一个较长程序的基本方法和利用流程图或N-S图表示算法,将本课程所学的知识合理地运用于实践当中。
了解一些书上没有的函数及使用方法。
二、设计方案论证
1.设计思路
利用数组对人们的信息进行循环的输入,记录以及输出等操作。
它主要包括以下功能:
输入,显示,删除,按姓名和出生年月日查找,按年龄阶段的不同进行统计以及读入和写入文档等。
2.分工
我和朱琼雪(0908267)为一组做的课程设计,并且在写源程序和进行上机调试的时候一直都是一起协同合作,最终完成了整个程序。
3.流程图
4.源程序
#include
#include
#include
structpeople
{
charname[10],sex,num[20];
intyear;
shortmonth,day,age;
structpeople*peop;
};
voidpadd(void);
voidpdelete(void);
voidpcount(void);
voidpsearch(void);
voidpprintf(structpeople*pp);
voidpsave(void);
voidpread(void);
structpeople*hp=NULL;
intinti=0;
voidmain(void)
{
intintj=0;
charch;
pread();
while(intj!
=5)
{
printf("\t\tPleaseSelectATask:
\n\t\t1.Add\n\t\t2.Delete\n\t\t3.Count\n\t\t4.Search\n\t\t5.Exit\n\t\tPleaseSelectOne:
");
scanf("%d",&intj);
if(intj==1)
{
padd();
}
elseif(intj==2)
{
pdelete();
}
elseif(intj==3)
{
pcount();
}
elseif(intj==4)
{
psearch();
}if((fp=fopen("data.dat","rb+"))==NULL)
{
exit
(1);
}
else
{
while(pp!
=NULL)
{
fwrite(pp,sizeof(structpeople),1,fp);
pp=pp->peop;
}
fwrite(pep,sizeof(structpeople),1,fp);
fclose(fp);
printf("\t\tSucceed!
\n\t\t");
}
free(pep);
}
elseif(intj==5)
{
printf("AreYouSure?
(Y/N)");
ch=getchar();
if(ch=='N'||ch=='n')
{
intj=0;
}
}
else
{
printf("\t\tWrongTask");
exit
(1);
}
}
}
voidpadd(void)
{
structpeople*pp=NULL;
pp=hp;
hp=(structpeople*)malloc(sizeof(structpeople));
hp->peop=pp;
printf("\t\tPleaseInputInfomation(NameAgeSexBirthday(YearMonthDay)IDCardNumber):
\n");
scanf("%s%hd%c%d%hd%hd%s",hp->name,&hp->age,&hp->sex,&hp->year,&hp->month,&hp->day,hp->num);
pprintf(hp);
psave();
system("pause");
system("cls");
}
voidpdelete(void)
{charname[10],ch;
structpeople*pp=hp,*pep=hp;
printf("\t\tInputName:
");
getchar();
gets(name);
while(pp!
=NULL)
{
if(strcmp(pp->name,name)==0)
{
break;
}
pep=pp;
pp=pp->peop;
}
printf("\t\tAreYouSure?
(Y/N)");
ch=getchar();
if(ch=='Y'||ch=='y')
{
if(pp==hp)
{
hp=pp->peop;
free(pp);
}
else
{
pep->peop=pp->peop;
free(pp);
}
psave();
}
system("pause");
system("cls");
}
voidpcount(void)
{
shortmaxage=0,minage=0,inti=0;
structpeople*pp=hp;
printf("\t\tInputAge((MinAge)(MaxAge)):
");
scanf("%hd%hd",&minage,&maxage);
while(pp!
=NULL)
{
if(pp->age>=minage&&pp->age<=maxage)
{
pprintf(pp);
inti++;
}
pp=pp->peop;
}
printf("Sumis%d\n\t\t",inti);
system("pause");
system("cls");
}
voidpsearch(void)
{
intyear=0;
shortmonth=0,day=0,inti=0;
structpeople*pp=hp;
charname[10];
if(hp==NULL)
{
printf("\t\tNodata!
\n");
}
else
{
printf("\t\tPleaseSelectATask:
\n\t\t1.ByName\n\t\t2.ByBirthday\n\t\tPleaseSelect:
");
scanf("%d",&inti);
if(inti==1)
{
printf("\t\tInputName:
");
getchar();
gets(name);
while(pp!
=NULL)
{
if(strcmp(pp->name,name)==0)
{
pprintf(pp);
}
pp=pp->peop;
}
}
elseif(inti==2)
{
printf("\t\tInputBirthday:
");
scanf("%d%hd%hd",&year,&month,&day);
while(pp!
=NULL)
{
if(year==pp->year&&month==pp->month&&day==pp->day)
{
pprintf(pp);
}
pp=pp->peop;
}
}
else
{
printf("\t\tWrongTask!
");
exit
(1);
}
}
system("pause");
system("cls");
}
voidpprintf(structpeople*pp)
{
printf("\t\t%-10s%-4d%-2c%-6d%-4d%-4d%-20s\n\t\t",pp->name,pp->age,pp->sex,pp->year,pp->month,pp->day,pp->num);
}
voidpread(void)
{
FILE*fp;
intinti=0;
structpeople*pp=NULL,*pep,*p;
hp=pp=(structpeople*)malloc(sizeof(structpeople));
pep=(structpeople*)malloc(sizeof(structpeople));
strcpy(pep->name,"");
strcpy(pep->num,"");
pep->sex='\0';
pep->age=-1;
pep->day=0;
pep->month=0;
pep->year=0;
if((fp=fopen("data.dat","rb"))==NULL)
{
printf("\t\tNoFileAvailable!
\n");
if((fp=fopen("data.dat","wb"))==NULL)
{
exit
(1);
}
else
{
fwrite(pep,sizeof(structpeople),1,fp);
hp=NULL;
printf("\t\tANewFileHaveBeenRebuilded!
\n");
}
}
else
{
fread(pep,sizeof(structpeople),1,fp);
while(pep->age!
=-1)
{
*pp=*pep;
p=pp;
p->peop=pp=(structpeople*)malloc(sizeof(structpeople));
inti++;
fread(pep,sizeof(structpeople),1,fp);
}
if(inti==0)
{
hp=NULL;
}
else
{
p->peop=NULL;
}
}
fclose(fp);
free(pp);
free(pep);
}
voidpsave(void)
{
structpeople*pep,*pp=hp;
FILE*fp;
pep=(structpeople*)malloc(sizeof(structpeople));
strcpy(pep->name,"");
strcpy(pep->num,"");
pep->sex='\0';
pep->age=-1;
pep->day=0;
pep->month=0;
pep->year=0;
if((fp=fopen("data.dat","rb+"))==NULL)
{
exit
(1);
}
else
{
while(pp!
=NULL)
{
fwrite(pp,sizeof(structpeople),1,fp);
pp=pp->peop;
}
fwrite(pep,sizeof(structpeople),1,fp);
fclose(fp);
printf("\t\tSucceed!
\n\t\t");
}
free(pep);
}
5.程序运行过程及截图
(1)出现菜单界面。
有五种选择:
增加,删除,统计,查询和退出程序。
可以从中选择一项执行。
(2)选择菜单中的第一个选项,即增加个人信息。
程序会提示你输出个人的相关信息:
姓名,年龄,性别,出生日期以及身份证号码。
并且在输入完成敲入回车后,界面上会显示刚才的信息以便核对。
(3)在菜单选项中选择第二项,即删除某人信息。
它是根据姓名来删除个人信息的。
在输入正确的姓名后程序会提示是否确定删除该人信息。
选择是,则删除。
最后显示成功,即删除成功。
(4)在主菜单选项中选择第三项,即统计。
它是按照年龄阶段来统计的。
在系统的提示下输入年龄的上限和下限。
系统不仅会显示出所有符合这个年龄段的个人基本信息,还会在界面上显示出这个年龄段的总人数。
由界面可知,在该年龄段的人数总共是1个人。
(5)选择菜单项中的第四项,即查询。
查询时可按系统提示选择名字和出生日期这两种方式进行查询。
若选择按姓名查询,在输入正确的姓名后,系统会在界面上显示出该人的基本信息:
若选择按照出生日期查询,在输入正确的出生日期后,系统会在界面上显示出该人的基本信息:
:
(6)选择菜单项中的第五项,即系统会自动退出程序。
三、设计体会
我和朱琼雪在选择这个课题后,才发现自己的知识有限,有不少内容需要自己去学习,于是我们查阅了很多的资料书,也向一些高年级的学姐学长们请教过。
在程序上机运行的时候有很多错误,我们反复检查,最后才发现时细节上的错误才导致程序不能正常运行,这些都从侧面上说明了我们对所学的掌握的不牢固。
然而,也必须承认在做课程设计的过程中我和朱琼雪的编程能力都有所提高,对知识的掌握也越来越牢固,两个人之间的默契也越来越多,虽然我们的程序也许会稍显简单,功能也不是很强大,实际使用的可能性不是很大,但是我们从中学到了很多,并且也为以后更深层次的学习计算机语言打下了良好的基础。
四、参考文献
【1】《C语言程序开发范例宝典》作者:
王娣,安剑,孙秀梅;出版:
人民邮电出版社出版日期:
2010年01月;
【2】《C专家编程》作者:
(美)林登(LinDen,P.V.D);出版社:
人民邮电出版社;
【3】《C陷阱和缺陷》作者:
(美)凯尼格著,高巍译;出版社:
人民邮电出版社;
【4】《C程序设计语言》(第2版·新版)作者:
克尼汉译者:
徐宝文/李志;出版社:
机械工业出版社;
【5】《C程序设计教程》作 者:
徐士良,孙甲松;出版社:
清华大学出版社
物理与电子信息学院课程设计评定意见
指导教师评语
成绩:
签名:
年 月 日