C语言实训报告(有源程序)_第1页
C语言实训报告(有源程序)_第2页
C语言实训报告(有源程序)_第3页
C语言实训报告(有源程序)_第4页
C语言实训报告(有源程序)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计与数据结构实训报告课题名称: 专 业: 班 级: 学 号: 姓 名: 指导教师: 2008 年 12 月 25 日目 录1 课程设计目的 12 课程设计题目 13 课程设计报告内容 14 结论 105 结束语 116 参考书目 117 附录:(源程序清单) 12考核、评价项目考核内容得分实训评价实训的平时考核 (30分)出勤情况、实训态度、效率、协作精神。知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统整体功能设计(10分)对通讯信录管理系统的功能设计完整、全面文件的设计 (5分)文件设计合理,有可扩展性。登陆模块的设计 (5分)能够实现用户登陆,并作出合理的安全设计,

2、无登陆漏洞。添加记录模块设计(5分)能够正确添加记录并保存到文件中删除记录模块设计(5分)能够正确删除记录并修改文件中的数据修改记录模块设计(5分)能够正确地完成记录修改并保存数据查找记录模块设计(5分)能够按照要求查找到满足条件的记录显示记录模块设计(5分)能够正确的将数据全部显示系统功能全部实现(5分)系统整体效果、包括的模块的数量及每个模块具体的实现功能。是否完成前面设计的全部功能实训文档 (20分)表达能力、文档写作能力、文档的规范性合计教师评语: 成绩:教师: 年 月 日一、课程设计题目商场销售管理管理系统二、实训目的(1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本

3、思路和方法。(2)掌握C+的基本概念和基础知识。(3)通过训练能够读懂较为复杂的C+语言源程序并具备基本C+语言程序设计的能力。(4)熟练掌握各种常用类的定义,继承,文件的应用,为更好的理解面向对象打下更好的基础。(5)通过实训,培养自己编写、调试、分析大型应用程序的能力。(6)掌握面向对象的基本原理,提高学生综合程序设计的能力。(7)培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。(8) 培养自己良好的学习兴趣,独立的编程风格。(9) 通过实训检查自己学习上的不足,达到熟练掌握C+语言的基本知识和技能。 三、课程设计报告内容3.1功能要求该系统运行在DO

4、S环境下,人机界面为命令行文本界面。完成的任务是对若干人的通信录信息进行管理,且数据保存到文件中。实现的主要功能是:= 登陆: 判断用户输入的密码正确性,并限制用户只能有三次机会输入,若超过则关闭计算机。= 添加:增加一个或几个人的通信录信息。= 删除:删除已输入的通信录信息。= 查询:根据输入的姓名查找通信录信息。= 修改:根据输入的姓名修改通信录信息。= 显示:输出所有通信录信息。3.2 设计环境所使用的语言采用标准C,开发工具可选用在DOS环境下的Turbo C或Win-TC,也可在Windows环境下的C+Builder。3.3 数据结构本系统是对通信录的信息进行管理,通信录记录的信息

5、采用C的结构体数据类型描述,定义如下: struct ren /*定义个人资料结构体类型*/ int num; /*编号*/ char name10; /*姓名*/ char tel12; /*电话号码*/ char email20; /*email地址*/ char qq12; /*QQ*/ char address50; /*住址*/;3.4实现方法及主要算法分析(1)口令设计模块:调用strcmp函数判断输入是否与密码正确。getch()读入一个字符不回显在屏幕上,不用回车结束。getchar()将字符输入到缓冲区直到输入回车才返回给系统。调用system(shutdown -s )关闭

6、计算机。(2)主界面的设计:主界面采用文本菜单的形式,各功能调用通过菜单进行选择。采用循环处理,以便执行完某项处理后,仍可选择其他项处理。在循环内先显示提示信息,然后读取用户输入,使用switch语句对用户的输入进行判断,分别调用相应的模块,当某模块结束后再次回到文本菜单,直到用户选择结束程序菜单,才退出循环,从而退出系统。(3) 外部文件的类型:文件采用的二进制的文件,对文件的读写采用顺序文件的方式,并使用fread和fwrite等函数对文件进行操作。(4)清屏函数:一般由上一级菜单屏幕进入下一级菜单屏幕或由下一级菜单屏幕返回上一级菜单屏幕都需要清除屏幕原来显示的内容。同时在调用程序的过程中

7、,记录需要清屏的位置,然后修改代码,加入clrscr()函数清屏。(5)提示信息:一般的输入与输出需有相应的提示信息,以增加用户的交互性,增加输出的可读性,以帮助用户使用程序。(6)设置颜色:textbackground()、textcolor()函数设置背景和前景颜色(7)光标定位:gotoxy(列,行); 光标定位3.5模块设计根据功能要求,本系统为五大主要模块,具体模块如表所示。表 通讯录管理管理系统的模块main()主控函数add()增加个人资料del()删除个人资料edit()修改个人资料search()查找个人资料主函数display()浏览所有信息login()限制登陆口令pau

8、se()等待Y、y、n、Y键输入pause2()等待任意键输入load_rec()统计记录数search_name()按姓名查找个人资料search_qq()按QQ查找个人资料search_email()按EMAIL查找个人资料3.6处理流程(1)口令设计模块提示输入正确结束提示关闭计算机输入次数超过3次密码正确?输入密码提示输入密码设置背景和前景颜色开始(2)通讯录主界面模块清屏显示菜单输入选项至select增加记录删除记录修改记录显示所有记录查找记录结束开始(3)增加记录模块 (4)显示记录模块清屏输入通信录数据打开数据文件移动指针到文件尾部将所输出数据写到文件关闭文件是否继续清屏打开数据

9、文件将所有记录读入到数组ren中关闭文件显示ren中所有记录返回开始函数开始函数返回提示输入(5)删除记录清屏提示输入姓名输入姓名打开数据文件将所有记录读入到数组ren中关闭文件在数组ren中搜索姓名相同的字段查找到?显示该记录删除?删除该记录打开数据文件将所有记录读入到数组ren中关闭文件返回开始函数(6)修改记录清屏提示输入姓名输入姓名打开数据文件将所有记录读入到数组ren中关闭文件在数组ren中搜索姓名相同的字段查找到?显示该记录修改?修改该记录打开数据文件将所有记录读入到数组ren中关闭文件返回开始函数开始函数清屏显示菜单输入选项至按姓名查找按QQ查找按Email查找返回开始函数开始函

10、数开始函数清屏清屏清屏提示输入姓名提示输入QQ输入姓名输入Email输入QQ打开数据文件打开数据文件打开数据文件将所有记录读入到数组ren中将所有记录读入到数组ren中将所有记录读入到数组ren中关闭文件在数组ren中搜索姓名相同的字段并显示关闭文件在数组ren中搜索QQ相同的字段并显示关闭文件在数组ren中搜索Email相同的字段并显示返回返回返回提示输入Email(7)查找主模块(8)按姓名查找,按QQ查找,按EMAIL查找模块四、结论通信录管理系统的编写,看似杂乱无头绪,实际上却并不如此。它的每一个功能都能分成模块,有句话说的好,大事化小,小事化了。C语言编程也正式如此,把一个大的程序分

11、为若干相互独立的模块,这样使完成每一个模块的工作变得单纯而明确,这样不仅降低了难度还使得思路清晰,很容易编写出要做的程序,从而为设计一些较大的软件打下了良好的基础。分析问题:通讯录管理的整体功能都包括登陆限制、增加成员、删除成员、查看成员、修改成员、登陆口令五大板块,而查看有包括姓名查看,电话查看,QQ查看,E-mail查看四个模块。(1) 设计的数据对象包括整形:编号。字符型:姓名、电话、E-mail、QQ、地址。(2) 数据结构线性数据结构,定义人数上限为100.算法的设计:(1) 自顶向下 现有全局,在进行整体设计,然后再进行下层的设计,逐步实现精细化。采用这种方法能够做到胸有全局,能全

12、盘考虑,不至于顾此失彼,头重脚轻。(2) 逐步细化 一步步地将上层的任务分解成较小的、易于实现的任务,知道可以很简单实现为止。编写源程序:(1) 不求速度,但求质量!一步一个脚印,编写程序时候宁可速度慢些也要尽量保证质量,做到尽量不出错。(2) 精力集中,全神贯注!写程序时候最忌讳三心二意,这样才能思路清晰保证质量。(3) 保持一个良好的编程心态,不要被长长的代码吓到,更不要厌烦,既然同样都是写,为什么不仲满激情的去写那? 程序的编译与运行:(1) 查找错误是一件让人闹心的事,但是要注重技巧,注意平时经验的积累。才能在最快的时间找出错误(2) 用心去查找,也许你会发现错误并不是很难找(3) 程

13、序编译成功不要满足现状,要积极测试程序的可用性,对功能不理想,存在缺点的地方,积极的改进,完善。 五、结束语在实训过程中,使我良好的锻炼了自己,首先是兴趣方面,通过编写通讯录管理系统使我更加喜欢编程,使我从以前的迷茫状态中解脱出来,使我了解了编程的真正意义。我想这对我以后的人生有着很大的帮助。其次通过编写通讯录管理系统使我对写程序有了一定的思路,不像以前无从下手,使我理解了算法的意义,使我懂得了模块化思想的好处。通过一个星期的编写代码,使我对书本上的知识有了更深的理解,甚至有很多不懂的问题在这过程中自然而然的理解了。对期末考试更有了信心。在黄爽老师的悉心指导下,我对C语言有了更深刻的理解,对程

14、序的算法,数据的定义,程序的改错等方面的能力有了很大提高,自身的注意力,耐心,和对编程的兴趣有了很大增长,使我获益匪浅。六、参考书目:1 周成义,汤德俊,钟菊,C语言程序设计与数据结构,中国铁道出版社,北京,2007年8月2(美)克尼汉,(美)里奇 著,徐宝文,李志 译, C程序设计语言,机械工业出版社2004年01月3 七、附录:(源程序清单)/*通讯录程序*/#include stdio.h#define size 100#define len sizeof(struct ren) struct ren int num; char name10; char tel12; char emai

15、l20; char qq12; char address50; rensize; FILE *fp; void index(); void add(); void del(); void edit(); void search(); void display(); void login(); char pause(); void pause2(); int load_rec(); char search_name(); char search_qq(); char search_email(); main() login();getch(); void login() int i=0,coun

16、t=0; char ch,in_psw20,psw20=123;textbackground(6); textcolor(3); clrscr(); while(1) gotoxy(25,12); printf(请输入密码:); while (ch=getch()!=13) in_pswi+=ch; printf(*) ; if(i=20) break; in_pswi=0; if(strcmp(in_psw,psw)=0) gotoxy(25,13); printf(密码正确!); getch(); index(); break; else count+; gotoxy(25,13); pr

17、intf(密码错误重新输入!); getch(); if(count=3) gotoxy(25,14); printf(密码错误次数过多); gotoxy(25,15); printf(所以你必须关机!); getch(); system(shutdown -s ); break; clrscr(); void index()/*主界面模块*/ char select; /*实现菜单*/ while(1) clrscr(); printf(nt 通讯录); printf(nt=); printf(nt 1 增加记录); printf(nt 2 删除记录); printf(nt 3 修改记录);

18、 printf(nt 4 显示所有记录); printf(nt 5 查找记录); printf(nt 6 退出); printf(nt=); printf(nt 请选择:(1-6); select=getch(); switch(select) case1:add(); break; case2:del(); break; case3:edit(); break; case4:display(); break; case5:search(); break; case6:exit(0); default:printf(nt请选择正确的数字范围); getch(); char pause() ch

19、ar c; while(1) c=getch(); if(c=Y|c=y|c=N|c=n) break; return(c); void pause2() printf(n按任意键继续.); getch(); int load_rec() int num=0; /*文件的记录数*/ fp=fopen(txl.dat,rb); while(!feof(fp) fseek(fp,num*len,0); fread(&rennum,len,1,fp); num=num+1; fclose(fp); return(num-1); void add() int n; char c=y; if(fp=fo

20、pen(txl.dat,rb)=NULL) n=load_rec(); while(c=Y|c=y) else clrscr();/*清屏*/ printf(n输入数据); printf(n=); printf(n请输入姓名:); scanf(%s,); printf(n请输入电话:); scanf(%s,renn.tel); printf(n请输入E_MAIL:); scanf(%s,renn.email); printf(n请输入QQ号码:); scanf(%s,renn.qq); printf(n请输入地址:); scanf(%s,renn.address); prin

21、tf(nt=); renn.num=n+1; printf(nt编号t姓名t电话temailtQQt地址); printf(nt%dt%st%st%st%st%sn, renn.num,,renn.tel,renn.email, renn.qq,renn.address); printf(n输入是否正确(Y/N):); c=pause(); /*等待Y,y,N,n键处理函数*/ if(c=n|c=N) printf(n重新输入数据); pause2();/*等待任意键处理函数*/ c=y; continue; fp=fopen(txl.dat,ab+); fseek(fp,l

22、en,2); fwrite(&renn,len,1,fp);/*fwrite(buffer,size,count,fp) fclose(fp);/*文件关闭*/ n=n+1; /*数组下标不断加1*/ printf(n是否继续输入(Y/N):); c=pause();/*等待Y,y,N,n键处理函数*/ void del() int n,i,j,m,count=0,count1=0; char del_name10,c; clrscr(); if(fp=fopen(txl.dat,ab)=NULL) printf(文件找不到.); pause2(); n=load_rec(); gotoxy(

23、25,12); printf(请输入要删除的姓名:); scanf(%s,del_name); clrscr(); for(i=0;in;i+) clrscr(); if(strcmp(,del_name)=0) count+; printf(找到第%d个记录,count); printf(nt编号t姓名t电话temailtQQt地址); printf(nt=); printf(nt%dt%st%st%st%st%sn, reni.num,,reni.tel,reni.email, reni.qq,reni.address); printf(真的删除吗?(Y

24、/N):); c=pause(); /*等待Y,y,N,n键处理函数*/ if(c=y|c=Y) count1+; for(j=i;jn;j+) renj.num=renj+1.num-1; strcpy(,renj+1.name); strcpy(renj.tel,renj+1.tel); strcpy(renj.email,renj+1.email); strcpy(renj.qq,renj+1.qq); strcpy(renj.address,renj+1.address); i-; printf(n记录已删除!); getch(); fp=fopen(txl.dat,

25、wb+); rewind(fp); for(m=0;m=n) printf(n记录没有找到!); pause2(); void edit() int n,i,j,m,count=0; char edit_name10,c; clrscr(); if(fp=fopen(txl.dat,ab)=NULL) printf(文件找不到.); pause2(); n=load_rec(); gotoxy(25,12); printf(请输入要修改的姓名:); scanf(%s,edit_name); clrscr(); for(i=0;in;i+) clrscr(); if(strcmp(reni.na

26、me,edit_name)=0) count+; printf(找到第%d个记录,count); printf(nt编号t姓名t电话temailtQQt地址); printf(nt=); printf(nt%dt%st%st%st%st%sn, reni.num,,reni.tel,reni.email, reni.qq,reni.address); printf(n是否修改记录?(Y/N):); c=pause(); loop: if(c=y|c=Y) printf(nt请输入修改后的数据:); printf(nt=); printf(n请输入姓名:); scanf(%s,

27、); printf(n请输入电话:); scanf(%s,reni.tel); printf(n请输如的E-MAIL:); scanf(%s,reni.email); printf(n请输入QQ号码:); scanf(%s,reni.qq); printf(n请输入的地址:); scanf(%s,reni.address); printf(nt=); printf(nt编号t姓名t电话temailtQQt地址); printf(nt%dt%st%st%st%st%sn, reni.num,,reni.tel,reni.email, reni.qq,reni.

28、address); printf(n输入是否正确(Y/N):); c=pause(); if(c=n|c=N) printf(n重新输入数据); pause2(); c=y; goto loop; fp=fopen(txl.dat,wb+); rewind(fp); for(m=0;mn;m+) fseek(fp,m*len,0); fwrite(&renm,len,1,fp); fclose(fp); if(count=0) printf(没有您要查找的记录!); pause2(); else printf(文件尾部 ); void display() /*浏览所有记录*/ int n,i;

29、 clrscr(); if(fp=fopen(txl.dat,rb)=NULL) printf(n文件找不到.); pause2(); n=load_rec(); printf(tttt共有%d条记录,n); getch(); printf(nt编号t姓名t电话temailtQQt地址); printf(nt=); for(i=0;i0&(i+1)%10=0) pause2(); clrscr(); printf(nt编号t姓名t电话temailtQQt地址); printf(nt=); printf(nt已显示所有记录); pause2(); void search() char selec

30、t; while(1) clrscr(); printf(nt 查找方式); printf(nt=); printf(nt 1 按姓名查找); printf(nt 2 按qq查找); printf(nt 3 按E-mail查找); printf(nt 4 返回上一级菜单); printf(nt=); printf(nt 请选择:(1-4); select=getch(); switch(select) case1:search_name(); break; case2:search_qq(); break; case3:search_email(); break; case4:index();

31、 default:printf(nt请选择正确的数字范围); getch(); char search_name()int i,count=0,n; char _name10 ,c;clrscr();if(fp=fopen(txl.dat,ab)=NULL) printf(文件找不到.); pause2(); n=load_rec(); gotoxy(25,12); printf(请输入要查找的姓名:); scanf(%s,_name); clrscr(); printf(nt编号t姓名t电话temailtQQt地址); printf(nt=); for(i=0;in;i+) if(strcmp(,_name)=0) count+; printf(nt%dt%st%st%st%st%sn, reni.num,,reni.tel,reni.email, reni.qq,reni.address); if(count=0) clrscr(); got

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论