




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西北农林科技大学信息工程学院身份证管理程序 实习报告题 目: 身份证管理程序 目 录一、综合训练目的与要求3二、综合训练任务3三、总体设计3四、详细设计说明3五、调试与测试3六、实习日志3七、实习总结3八、附录:核心代码清单317一、综合训练目的与要求正文论文正文用小四号宋体字,两端对齐。正文如涉及到代码,代码用5号Arial字体行间距为17磅。本综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完C语言程序设计 数据结构课程后进行的一次全面的综合练习。本课综合训练的目的和任务:1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握;2. 掌握C语言编程和程序调试的基本技能;3. 利用C语言进行基本的软件设计;4. 掌握书写程序设计说明文档的能力;5. 提高运用C语言、数据结构解决实际问题的能力。二、综合训练任务本次训练需要编写一个身份证信息管理系统。此系统可以完成录入身份证信息、查询身份证信息、修改和删除身份证信息;录入信息后可统计相关的(诸如省市地区人数等)信息,并将信息存储在文件中;同时,还可以读取有地区编号的相关文件并输出给用户,以方便信息的录入;在使用者录入时,可选择两种录入方式,即简洁录入和完全录入;另外,本系统还提供了中英文两种界面可供用户选择。三、总体设计设计思路:应用结构体对身份证信息进行输入、删除、查找、修改、保存等操作。技术方案:1.建立身份证信息结构体链表;3.对ID_Write.txt文件的打开、输入、关闭等操作;4.对 ID_data.txt 文件的打开、读取、查找、关闭等操作;5.对身份证号校验位的计算和对身份证号正误的判断;6.对中英文两种操作环境的实现;7.程序中应用指针、字符串、结构体嵌套、递归、函数调用等知识;8.应用库函数strcpy、strcmp、stnrcmp 、cls、echo、exit等;9.所有函数的健壮性处理;身份证管理系统的框架图如下所示:“4”统计操作“3”统计操作“2” 显示 记录语言选择选 项“5” 修改记录开 始使用指南“1” 输入 记录其它错误选项“6” 删除记录“7” 返回操作“0” 退出操作 图1 身份证管理系统的框架图 四、详细设计说明1.结构体:struct Birthchar year40;/出生年份char month40;/月份char day40;/出生日 Birthday;/出生日期struct Adchar pro40;/户籍所在省份(直辖市)char city40;/户籍所在市(县)char town40;/户籍所在县(区) Adress;/地址typedef struct Identitychar IDNumber40;/身份证号char name40;/姓名char sex40;/性别struct Birth Birthday;struct Ad Adress;struct Identity *next; IdentityInfor;/身份证2.相关函数:void Menu_Language_Select();/语言选择菜单void Menu_Welcome_Englise(int language);/英文欢迎菜单void Menu_Welcome_Chinese(int language);/中文欢迎菜单void ID_InputInformation(IdentityInfor *head,int language);/身份证信息录入void ID_WriteToTest(IdentityInfor *head,int language);/写入文本IdentityInfor * ID_Search(IdentityInfor *head,char ID_Number,int language);/查找信息void ID_Display(IdentityInfor *ID,int language);/输出信息void ID_Pro_Number_Count(IdentityInfor *head,char Pro_Number,int language);/省份人口统计void ID_Area_Number_Count(IdentityInfor *head,char Area_Number,int language);/地区人口统计void ID_Revise(IdentityInfor *ID,int language);/身份证信息修改int ID_Deletion(IdentityInfor *head,char ID_Number);/身份证信息删除void Option_Menu_English();/英文选项菜单void Option_Menu_Chinese();/中文选项菜单void ID_Judge(IdentityInfor *head,int language) ;/简洁判断式信息录入2.创建身份证信息模块void ID_InputInformation(IdentityInfor *head,int language);void ID_Judge(IdentityInfor *head,int language) ;/简洁判断式信息录入通过动态分配存储空间,建立链表并存储信息来建立通讯录。录入信息提示:当输入身份证号时输入字母会有提示:五、调试与测试.用malloc()函数给链表头结点head开辟空间后,head要进行初始化;但在被调用函数中又进行了一次初始化,以至于程序出错;head=(IdentityInfor *)malloc(sizeof(IdentityInfor);/Initalhead-next=NULL;.使用scanf()函数的时候没主要到前后的对应,例如本来有两个字符串,结果前连给的是三个%s, 正解的格式是scanf(%s%s,ID-IDNumber,ID-name);. 使用scanf()函数的时候如果录入的是数字,则应该用到取址符,否则不会得到数字;.在函数调用时没有注意到相关的传值,例如有的没有将链表的head传值,使得无法进行后续操作;.函数的返回值,在部分函数都应当给定返回值,一是用于健壮性处理,二是可以传回相关的信息,例如本程序中的IdentityInfor * ID_Judge(IdentityInfor *ID)函数使我长时间受到困扰,后来经过不断调试和请教终于解决,这个函数可以传回结构体指针型的值,也可以传回值;.健壮性处理,随着所编写的函数越来越多,循环越来越多,程序的健壮性处理就显得非常重要,所以在实习中,健壮性处理也是一个比较棘手的问题;例如有的函数出现的意外值都应当想到,即使没有想到,在操作过程中一一旦遇到应当及时解决;.开始用的是fwrite(p,sizeof(ID_Info),1,fp),以数据块的形式向文件中写入数据,fread(p,sizeof(Student),1,fp),以数据块的形式向内存中输送入数据,结果读出来的是乱码解决的方法是用fprintf(fp,“”,)一个一个地向文件中写入,用fscanf(fp,“”,)一个一个地读出。在老师的指导下,我还用了save()、load()、read()函数,save()是每次退出程序时,将所有数据存盘;load()函数是在程序运行开始时,将原文件的数据连接到链表中去;read()函数是将数据显示在屏幕上。收获是,我掌握了几种基本的关于文件的操作。8.在输入数据的过程中,有些数据是错误的,反而能输进去,在调试的过程中,我发现我应该给有些输入加一些判断情况,如:sex只能是f或m,如果不是,则重新输入sex。我明白了,程序做好了以后应该优化一下。 9.有一点还没有完善,就是在输入chose时,输入数字时可以判断输入是否合法,可输入字符时,就会出现滚屏现象,而我定义的chose是整型的六、实习日志7月1日今天是实习的第一天,今天实习的内容首先是确定自己实习的题目和指导老师,通过认真理解实习题目要求,进一步确定实习中所需要的知识内容和知识结构,大概想清楚解决问题的算法。. 身份证管理系统是处理身份证信息的,需要处理诸如身份证号码,姓名,性别,出生日期,户籍所在地区等相关信息;. 设计实习规划,制定相关的执行步骤;. 下午开始仔细研究相关算法,开始编写主函数以及相关的声明等等。月日今天实习的内容是:1.复习文件操作的相关内容,诸如文件读取、写入、查找;2.练习fscanf(),fprintf(),fread(),fwrite(),fopen(),fclose(),feof()等函数;3.通过练习已经基本掌握上述函数的功能,但在用fscanf()函数读取文本内容时存在乱码现象;月日今天实习的内容有:. 通过了解,我知道了身份证号码的各个数字代表的含义,第二代身份证号码由18位数字构成,其中,前位代表所在地区的编号,接着是出生年月日,后边是同地区同时出生时的编码,最后一位是校验码;.今天实现了给定一个身份证号,通过对数据文件的读取功能,得到相对应的地区(具体到省市区(县);.在读取文件的时候出现了乱码,后来查证是因为文件编码问题,Unicode等编码的文本会在文件开关加上相关编码信息,但不会显示,而ASCII编码的字符则不会有,故用ASCII编码的文本不会出现乱码现象;.同时如果用fwrite()函数,也不会出现乱码现象;月日今天实习的内容有:. 继续完善读取文件获取身份证信息的功能,昨天是仅仅得到了所在地区,而且仅是县(区),今天更新了一下文本数据;通过录入身份证号码,可以得到所在省,市,区(县);. 因为文本数据格式不统一,且数据非常之多(3097个),需要不断排查文本中存在的格式问题;月日月日 这几天的实习的内容有:. 开始编写核心代码之中的链表部分,即链表的相关操作;. 编写的用链表处理身份证信息的函数如下:void ID_InputInformation(IdentityInfor *head,int language);/ListCreateIdentityInfor * ID_Search(IdentityInfor *head,char ID_Number,int language);/Search the ID void ID_Display(IdentityInfor *ID,int language);void ID_Pro_Number_Count(IdentityInfor *head,char Pro_Number,int language);void ID_Area_Number_Count(IdentityInfor *head,char Area_Number,int language);void ID_Revise(IdentityInfor *ID,int language);int ID_Deletion(IdentityInfor *head,char ID_Number). 基本实习了编译通过,并进行相关的测试;.除第二函数外,其它都基本没有太大问题,相关健壮性处理有待最后执行;.在测试ID_Search()函数的时候通过了比较棘手的问题;.通过调试,找到了问题所在,即函数问题返回找到的结点指针,以致于后续操作无法执行;月日今天实习的内容是;. 解决ID_Search()函数无法返回结点指针的问题,即通过定义结构体指针的函数类型和return,以及head的初始化操作实现;. 测试后续几个链表操作,并一一通过测试;. 合并均与身份证管理的链表操作函数和文件操作函数,共被同一个main函数调用;月日今天实习的内容是:. 继续完善main函数;. 编写菜单函数;. 合并和完善各个函数;.加入一二级菜单并合并以上功能;.实现要求的和加入的所有功能并进行测试、调试;.得到后续.0版本;月日. 用大量数据(5668中的一部分)测试程序;. 完善程序的健壮性;. 实现中英文双语菜单;. 调试程序中的bug;. 例如又遇到以读取文本时编码和格式的问题,一一解决;. 得到7.0版本月日.完善各种菜单和提示性语句;.用大量数据(5668中的大部分,同类取代表性数据)测试;.经过调试等方法,上述数据都可以处理;.完善课程报告等相关作业;7月日.今天上午主要的内容是进行实习作品的展示;.下午是进行答疑;七、实习总结十天的实习,每天八小时面对VS,面对VC,写下多行代码。整个实习下来,既劳累又兴奋,还好,编程的热情不减,也不管这炎热的盛夏。这次训练,收获颇多。我在做身份证管理程序的这几天里,虽然遇到大大小小不少问题。现在想来,那些为调试而付出的大量时间确实可贵。身份证管理程序主要用到的线性链表的相关知识,同时还有用到诸如指针,文件,数组,结构体,各种循环等等,一路走来,对于语言的掌握也加深了一步,对于数据结构也有了更深的理解;另外得到很大提高的是我的信息搜索和学习能力。十天的实习很快就结束了。鉴于我自己的编码水平,这个程序虽然已经实现的所列的所有功能,但在具体操作中必然还有或多或少的问题存在,但是毫无疑问的是我确尽了相当的努力。也正因为如此,无论最终程序评价如何,都不再重要正如程序的正误,一切都取决于过程。八、附录:核心代码清单/*/* ID_InputInformation */*/void ID_InputInformation(IdentityInfor *head,int language)/ListCreateIdentityInfor *p;int n=1;/for countint iCount;/counterif(language)printf(How many IDs do you want to input:n);elseprintf(请输入你要输入的身份证个数:n);scanf(%d,&n);if(nIDNumber,p-name,p-sex,p-Birthday.year,p-Birthday.month,p-Birthday.day,p-A,p-Adress.city,p-Adress.town);for(iCount=0;iCountnext=head-next;head-next=p;if(iCount+1=n)break;p=(IdentityInfor *)malloc(sizeof(IdentityInfor);printf(NO.%d:n,(iCount+2);scanf(%s %s %s %s %s %s %s %s %s,p-IDNumber,p-name,p-sex,p-Birthday.year,p-Birthday.month,p-Birthday.day,p-A,p-Adress.city,p-Adress.town);system(cls);/*/* ID_Search */*/IdentityInfor * ID_Search(IdentityInfor *head,char ID_Number,int language)/Search the ID IdentityInfor *p;p=head-next;while(p!=NULL)if(strcmp(p-IDNumber,ID_Number)=0)break;p=p-next;if(p=NULL)printf(错误,没有找到该身份证信息n);getch();return 0;elsereturn p;/*/* ID_Display(ID) */*/void ID_Display(IdentityInfor *ID,int language)system(cls);printf(要查寻的身份证信息为:n);printf(%s %s %s %s %s %s %s %s %sn,ID-IDNumber,ID-name,ID-sex,ID-Birthday.year,ID-Birthday.month,ID-Birthday.day,ID-A,ID-Adress.city,ID-Adress.town);/*/* ID_Pro_Number_Count */*/void ID_Pro_Number_Count(IdentityInfor *head,char Pro_Number,int language)IdentityInfor *p;int iCount=0;p=head-next;while(p!=NULL)if(strncmp(p-IDNumber,Pro_Number,2)=0) iCount+;p=p-next;printf(该省的人口数为:%dn,iCount);/*/* ID_Area_Number_Count */*/void ID_Area_Number_Count(IdentityInfor *head,char Area_Number,int language)IdentityInfor *p;int iCount=0;p=head;while(p!=NULL)if(strncmp(p-IDNumber,Area_Number,6)=0) iCount+;p=p-next;printf(该地区人口数为: %d n,iCount);/*/* ID_Revise */*/void ID_Revise(IdentityInfor *ID,int language)printf(请重新输入身份证信息:n);scanf(%s %s %s %s %s %s %s %s %s,ID-IDNumber,ID-name,ID-sex,ID-Birthday.year,ID-Birthday.month,ID-Birthday.day,ID-A,ID-Adress.city,ID-Adress.town);/*/* ID_Delation */*/int ID_Deletion(IdentityInfor *head,char ID_Number)IdentityInfor *p,*q;p=head;while(p-next!=NULL&p-next-next!=NULL&strcmp(p-next-IDNumber,ID_Number)!=0)p=p-next;q=p-next;p-next=p-next-next;free(q);return 1;void ID_Judge( IdentityInfor * head,int language ) IdentityInfor *ID;char Num40,Pro40,City40,Town40;char temp40;int i,j,m;/for countint n;/number of IDsint t;int s,w;/sum,weightFILE *Test_Read;printf(请输入你要输入的身份证个数: );scanf(%d,&n);for(m=1;mIDNumber,ID-name);/*=ID calibration (身份证校验)=*/* */*=*/for(j=18;j1;j-)w=(int)pow(2,(j-1);w=w%11;s+=(ID-IDNumber18-j-0)*w;s=s%11;if(s=0&ID-IDNumber17=1|s=1&ID-IDNumber17=0|s=2&ID-IDNumber17=x|s=2&ID-IDNumber17=X|s=3&ID-IDNumber17=9|s=4&ID-IDNumber17=8|s=5&ID-IDNumber17=7|s=6&ID-IDNumber17=6|s=7&ID-IDNumber17=5|s=8&ID-IDNumber17=4|s=9&ID-IDNumber17=3|s=10&ID-IDNumber17=2)t=0;elseprintf(输入有误,请重新输入n);free(ID);t=1;Test_Read=fopen(ID_data.txt,r);if(Test_Read=NULL)printf(Error!n);exit(1);while(!feof(Test_Read)fscanf(Test_Read,%s%s%s%s,Num,Pro,City,Town);if(strncmp(ID-IDNumber,Num,6)=0)break;if(strncmp(ID-IDNumber,Num,6)=0)printf(n 你来自:%s %s %s ,Pro,City,Town);strcpy(ID-A,Pro);strcpy(ID-Adress.city,City);strcpy(ID-Adress.town,Town);else printf( 没有找到!n);free(ID);goto BACK;/*=Birthday_Judge=*/printf(n 出生日期:);for(i=6,j=0;iIDNumberi);tempj=ID-IDNumberi;tempj=0;strcpy(ID-Birthday.year,temp);printf(年);for(i=10,j=0;iIDNumberi);tempj=ID-IDNumberi;temp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行招聘考试题讲解题及答案
- 银行业能力测试题及答案
- 上海专业考试试题及答案
- 药学专业招聘试题及答案
- 宣传专业试题及答案
- 《烹饪原料初加工工艺》项目四干货原料的初加工
- 湖北省十堰市 2025年 七年级上学期期中考试地理试卷(含答案)
- 墙体铝扣板施工方案
- 跨国贸易合同范本
- 2026届安徽省合肥市普通高中学业水平选择性考试物理模拟检测试卷(三)
- 2025北京京剧院招聘工作人员10人考试备考题库及答案解析
- 检修现场管理培训课件
- 信息网络安全考题「附答案」
- 消防设备设施操作讲解培训课件P
- 2025年执业医师考试-中医师承及确有专长考核历年参考题库含答案解析(5卷单选一百题)
- 中国绳结课件
- 中国民族服饰课件
- 第9课《天上有颗“南仁东星”》课件 2025-2026学年统编版八年级语文上册
- 早读的好处教学课件
- 人教版高一上学期数学(必修一)《1.3集合的基本运算》同步练习题及答案
- 大店童装开业活动方案
评论
0/150
提交评论