C语言课程设计-_第1页
C语言课程设计-_第2页
C语言课程设计-_第3页
C语言课程设计-_第4页
C语言课程设计-_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、中国地质大学本科生课程论文封面课程名称C语言程序设计教师姓名本科生姓名本科生学号本科生专业所在院系类别:日期:课程设计评语平时成绩:课程论文成绩:总成绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目录 TOC o 1-5 h z HYPERLINK l bookmark4 o Current Document 课程设计评语2目 录3 HYPERLINK l bookmark8 o Current Document 1课程论文题目4 HYPERLINK l bookmark10 o Curren

2、t Document 2程序设计思路4 HYPERLINK l bookmark12 o Current Document 3功能模块图5 HYPERLINK l bookmark16 o Current Document 4数据结构设计5 HYPERLINK l bookmark20 o Current Document 5算法设计5 HYPERLINK l bookmark40 o Current Document 6程序代码14 HYPERLINK l bookmark42 o Current Document 7程序运行结果14 HYPERLINK l bookmark44 o Cur

3、rent Document 8编程中遇到的困难及解决方法27 HYPERLINK l bookmark46 o Current Document 9总结心得及良好建议28 HYPERLINK l bookmark48 o Current Document 10致谢281课程论文题目通讯录管理系统要求:设计具有数据插入、修改、删除、显示和查询功能的电话簿管理系统 数据包括:人名、工作单位、电话号码和E-mail地址。 可对记录中的姓名和电话号码进行修改。可增加或删除记录。可显示所有保存的记录。可按人名或电话号码进行查询。2程序设计思路根据题目的要求,程序应该采用结构体数组和文件系统实现。应该有动

4、态的存储空间和文件输入、输出等操作功能;在程序中应该包括添加、显示、删除、 查询和修改以及保存和退出的功能;另外还应提供键盘式选择菜单实现功能选择。3.功能模块图系统功能模块图.数据结构设计整个程序中用到的数据主要是全局变量MAX 100和字符变量name10、addr20、 phnum20、email20。.算法设计1.主函数主函数的设计一般比较的简单,只提供输入,功能处理和输出部分的函数调 用。其中个功能模块用菜单方式选择。菜单部分也可以写成函数。流程图程序 main() int n;主函数流程图hc 程序 main() int n;主函数流程图hc 执行it语句ws/*变量保存选择菜单数

5、子*/creat();dof* j11 j11 Aj nnttti 门t*?不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不门)printf(nnt*WELCOME TO USE!*n);j / 11 j11 AnnTifTi tit*t不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不门)printf(nntt*Please make a choice below*n); printf(ntt1.Add a piece of meg);printf(ntt2.List all the meg); printf

6、(ntt3.Delete a piece of meg);printf(ntt4.Find a piece of meg); printf(ntt5.Alter a piece of meg);printf(ntt6.Save and Quit); printf(ntt7.Create an address book);printf(nnn);printf(t*Input Your Choice:*n);scanf(%d,&n);switch(n) /* 输 入 n 的 在 1-6 之 间 执 行 switch case 1: Add();/* 添加模块 */break;case 2: Lis

7、t();/*显示模块*/break;case 3: Delete();/*删除模块*/break;case 4: Find();/*查询模块:分为名字查询(0)和电话号码查询(1)*/break;case 5: Alter();/*修改模块:分为修改名字(0)和修改电话号码(1)*/break;case 6: exit(O);/*退出模块*/break;case 7: creat();/*带回链表起始地址*/fclose(fp);default:/*输入的 n 不在 1-6 之间执行 default */、!、!、!、!、!、!、!、!、!、!、!、!、!、!、!、!、!、!、!、!、!、!、

8、!、!、!、!、! TOC o 1-5 h z T)nTifT( 口t不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不x1 HYPERLINK l bookmark24 o Current Document printf(ntThe num should be 1-6n);T)nTifTi 口t不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不x1 break;while(1);2.各功能模块设计数据结构通讯录的数据信息:人名、工作单位、电话号码、E-mail地址均可以采用字 符型数组;可以采用结构体的形式,把各信息

9、作为结构的成员,由于通讯录要具有添加、查找、和删除的功能,所以整个通讯录采用链表比较容易的实现以上功 能。用结构体变量作为链表中的接点是最合适的。结构体变量可以是指针类型, 我们可以用这个指针类型的成员来存放下一个结点的地址。结构体的类型如下:struct personstypedefstruct pchar name10charname10;char addr20;charaddr20;char phnum20;charphnum20;char email20;charemail20;personsMAX;struct p*next;p,*linklist;struct persons 类型

10、为每个链表成员; typedef struct p 为一个动态的结点,它的成员 next 存放下一个结点的地址。以下为各模块分析时要用的指针:linklist head=NULL,t=NULL; /* 定 义头指针 和尾指针p *s,*p0,*p1,*p2,*p3,*p4,*p5;int i;char name110,ch;char str120 ;FILE *fp; /* 定 义 文 件 指 针输入模块程序void creat()/*将文件的信息读入结构体数组在转存入链表中*/ int j;long k;fp=fopen(people.txt,r+);/* 打 开 文 件if(fp!=NUL

11、L)for(i=1;iname,);strcpy(s-addr,personsi.addr);strcpy(s-phnum,personsi.phnum); strcpy(s-email,personsi.email);if(head=NULL)/*用尾 插法 将其插入 链表中head=s; elset-next=s;t=s;elsefp=fopen(people.txt,w); i=1;/*不能打开另开辟一个文件*/添加模块 由于运用的是链表的形式,且通讯录只是按照输入的先后循序排序,所以对添加的信息采用插入末端的方式,同时添加也使用于空通讯录的信息输入。程序voi

12、d Add()/*向通讯录中添加(或输入)一个人的信息*/s=(linklist)malloc(sizeof(p);s-next=NULL;printf(nnt*Please input the sbs message:*); printf(nnttname:);scanf(%s,s-name);printf(nnttAddr:);scanf(%s,s-addr);printf(nnttphnum:);scanf(%s,s-phnum);printf(nnttemai:);scanf(%s,s-email);if(head=NULL)elset-next=s; t=s; elset-next=

13、s; t=s; /*添加到链表的末尾*/显示模块 链表的一大好处是只要定义了头指针,则所有的信息就很容易的找到,指针 会一环扣一环的找到每个信息,显示出每个信息,直到最后到位指针结束。程序void List()p0=head;/*显示所有的信息*/* p0 指向头指针*/while(p0!=NULL) /* 通 讯 录 不 为 空彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、/printf(tname:%s,p0-name); printf(taddr:%s,p0-addr);printf(tphnum:%s,p0-phnum);printf(temail:%sn,p

14、0-email);p0=p0-next;/* p0 向后移一个位置*/p0=p0-next;删除模块删除一个人的信息相当于是删除链表中的一个结点。在删除后又要保证链表 不间断,如同手牵手排队的小孩,一个离队后,它两侧的小孩又自动地把手牵起 来,保证不间断即把结点从链表中分离开来,只要撤销原来的链表关系即可。 流程图要删除地信息要删除地信息程序void Delete()/*定义一个删除的函数*/char name010;p1=head;printf(nt*Please input a name:*n); /*输入要删除人 的姓名*/printf(nttname0:);gets(name0);sc

15、anf(%s,name0);while(strcmp(name0,p1-name)!=0)&(p1!=NULL)/* 根据各种情况判断可能性*/* 指 针 向 后 移 一 个 位 置/* 指 针 向 后 移 一 个 位 置/*找到要删除的位置/*找到要删除的位置*/if(strcmp(name0,p1-name)=0) if(p1=head)head=p1-next;else p2-next=p1-next;printf(nt*Delete success!*n);elseprintf(nt*Delete fail!*n); /*没找到要删除的位置*/查询模块 按照题目的要求查询可以分为姓名查

16、询和电话号码查询流程图程序程序 void Find()/*根据各种情况判断可能性*/*定义一个查询的函数*/ int n;char phnum120,name110;printf(nt*Search by name or phpnum?*name(n=0)phnum(n=1)*n);if(n=0)/*姓名查询*/printf(ntname:);p3=head;gets(name1); scanf(%s,&name1);/*输入姓名*/printf(*Input the number of n:*n); scanf(%d,&n);/*选择查询方while(strcmp(name1,p3-name

17、)!=0)&(p3!=NULL)p3=p3-next;if(p3-name=NULL)/*没有找到*/printf(nt*Can not find the message!*);else if(strcmp(name1,p3-name)=0)/*找到信息并输出*/printf(nt *Found the message:*n); printf(ntname: %s,p3-name); printf(taddress:%s,p3-addr); printf(temail: %s,p3-email);printf(tphnum: %s,p3-phnum);else if(n=1)/*电话号码查询*

18、/else if(n=1)printf(ntphnum1);p3=head;gets(phnum1);scanf(%s,&phnum1);/*输入电话号码*/while(strcmp(phnum1,p3-phnum)!=0)&(p3!=NULL) /*根据各种情况判断可能性*/ p3=p3-next;if(p3-phnum=NULL)/*没有找到*/printf(nt*Can not find the message!*);else if(strcmp(phnum1,p3-phnum)=0)/*找到信息并输出*/printf(nnt*Found the message:*);printf(nt

19、name: %s,p3-name);修改模块 按照题目的要求查询可以分为修改姓名和修改电话号码,修改模块的设计思 路和查询模块的思路基本上相同。流程图程序 void Alter()/*定义一个修改的函数程序 void Alter()/*定义一个修改的函数*/int m;char phnum220,name210;printf(nnt*Which message do you want alter?*name(m=0)phnum(m=1)*n);printf(*Input the number of m:*n); scanf(%d,&m);if(m=0) printf(ntname:);scan

20、f(%s,&name2);/*修改姓名*/*输入要修改的姓名*/top4=head;while(strcmp(name2,p4-name)!=0)&(p4!=NULL)/*根据各种情况判断可能性*/p4=p4-next;if(p4=NULL)printf(nt*Can not find the mame!*n); else if(strcmp(name2,p4-name)=0)/*找到要修改的姓名*/printf(nnt*Input the new nessage:*n);printf(nnnttname:);canf(%s,&name2);/*输入新的信息*/strcpy(p4-name,n

21、ame2);/*新的姓名修改成功*/else if(m=1)else if(m=1)/*修改电话号码*/printf(ntphnum:);scanf(%s,&phnum2); /*输入要修改的电话号码*/ p4=head;while(strcmp(phnum2,p4-phnum)!=0)&(p4!=NULL)/*根据各种情况判断可能性*/p4=p4-next;if(p4=NULL)printf(nt*Can not find the phnum!*n);else if(strcmp(phnum2,p4-phnum)=0)/*找到要修改的电话号码*/printf(nnt*Input the ne

22、w nessage:*n);printf(nnnttphnum:);scanf(%s,&phnum2);/*输入新的信息*/strcpy(p4-phnum,phnum2);/*新的电话号码修改成功*/printf(nnt*Altered success!*n);保存模块void Save()/*定义一个保存信息的函数*/void Save() int j;fp=fopen(people.txt,w);for(p5=head,j=0;p5!=NULL;j+,p5=p5-next) /*将信息装出入结构体数组在出入链表中*/ strcpy(,p5-name);strcpy

23、(personsj.addr,p5-addr);strcpy(personsj.phnum,p5-phnum);strcpy(personsj.email,p5-email);fwrite(&personsj,sizeof(struct persons),1,fp);6程序代码#include #include #include #define MAX 100 struct persons char name10; char addr20; char phnum20;char email20; personsMAX;typedef struct p char name10; char addr

24、20;char phnum20; char email20;struct p *next; p,*linklist;linklist head=NULL,t=NULL; p *s,*p0,*p1,*p2,*p3,*p4,*p5; int i;char name110,ch;char str120 ;FILE *fp;void creat() int j;long k;fp=fopen(people.txt,r+);if(fp!=NULL)for(i=1;iname,);strcpy(s-addr,personsi.addr);strcpy(s-phnum,person

25、si.phnum);strcpy(s-email,personsi.email); if(head=NULL) head=s;elset-next=s;t=s;else fp=fopen(people.txt,w); i=1;void Add() s=(linklist)malloc(sizeof(p); s-next=NULL;printf(nnt*Please input the sbs message:* printf(nnttname:);scanf(%s,s-name);printf(nnttAddr:);scanf(%s,s-addr);printf(nnttphnum:); sc

26、anf(%s,s-phnum);printf(nnttemai:); scanf(%s,s-email); if(head=NULL) head=s;elset-next=s;t=s;void List()p0=head;while(p0!=NULL) printf(tname:%s,p0-name); printf(taddr:%s,p0-addr); printf(tphnum:%s,p0-phnum); printf(temail:%sn,p0-email); p0=p0-next;void Delete()char name010;p1=head;printf(nt*Please in

27、put a name:*n); printf(nttname0:);gets(name0); scanf(%s,name0);while(strcmp(name0,p1-name)!=0)&(p1!=NULL) p2=p1;p1=p1-next; if(strcmp(name0,p1-name)=0) if(p1=head)head=p1-next; else p2-next=p1-next;else printf(nt*Delete fail!*n);void Find()int n;orchar phnum120,name110;orprintf(nt*Search by name php

28、num?*name(n=0)phnum(n=1)*n); printf(*Input the number of n:*n);scanf(%d,&n);if(n=0)printf(ntname:);p3=head;gets(name1);scanf(%s,&name1); while(strcmp(name1,p3-name)!=0)&(p3!=NULL) p3=p3-next;if(p3-name=NULL)printf(nt*Can not find the message!*);else if(strcmp(name1,p3-name)=0)printf(nt *Found the me

29、ssage:*n); printf(ntname: %s,p3-name);printf(taddress:%s,p3-addr);printf(temail: %s,p3-email);printf(tphnum: %s,p3-phnum);else if(n=1) printf(ntphnum1);p3=head;gets(phnum1);scanf(%s,&phnum1); while(strcmp(phnum1,p3-phnum)!=0)&(p3!=NULL) p3=p3-next;if(p3-phnum=NULL)printf(nt*Can not find the message!

30、*); else if(strcmp(phnum1,p3-phnum)=0) printf(nnt*Found the message:*); printf(ntname: %s,p3-name);printf(taddress:%s,p3-addr);printf(temail: %s,p3-email);printf(tphnum: %s,p3-phnum);void Alter()you wanttoint m;char phnum220,name210; printf(nnt*Which message do alter?*name(m=0)phnum(m=1)*n);you want

31、toprintf(*Input the number of m:*n);scanf(%d,&m);if(m=0)printf(ntname:);scanf(%s,&name2);p4=head; while(strcmp(name2,p4-name)!=0)&(p4!=NULL) p4=p4-next;if(p4=NULL)printf(nt*Can not find the mame!*n); else if(strcmp(name2,p4-name)=0) printf(nnt*Input the new nessage:*n);printf(nnnttname:);scanf(%s,&n

32、ame2);strcpy(p4-name,name2);printf(nnt*Altered success!*n); else if(m=1) printf(ntphnum:);scanf(%s,&phnum2); p4=head; while(strcmp(phnum2,p4-phnum)!=0)&(p4!=NULL) p4=p4-next;if(p4=NULL)printf(nt*Can not find the phnum!*n); else if(strcmp(phnum2,p4-phnum)=0) printf(nnt*Input the new nessage:*n); prin

33、tf(nnnttphnum:);scanf(%s,&phnum2); strcpy(p4-phnum,phnum2); printf(nnt*Altered success!*n);void Save() int j; fp=fopen(people.txt,w); for(p5=head,j=0;p5!=NULL;j+,p5=p5-next) strcpy(,p5-name); strcpy(personsj.addr,p5-addr); strcpy(personsj.phnum,p5-phnum);strcpy(personsj.email,p5-email);

34、 fwrite(&personsj,sizeof(struct persons),1,fp);main() int n; creat();dof* j11 j11 Aj nnttti 门t*?不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不门)printf(nnt*WELCOME TO USE!*n);j / 11 j11 AnnTifTi tit*t不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不门)printf(nntt*Please make a choice below*n); printf(ntt1

35、.Add a piece of meg);printf(ntt2.List all the meg); printf(ntt3.Delete a piece of meg);printf(ntt4.Find a piece of meg);printf(ntt5.Alter a piece of meg); printf(ntt6.Save and Quit); printf(ntt7.Create an address book); printf(nnn);printf(t*Input Your Choice:*n);scanf(%d,&n);switch(n) case 1: Add();

36、 break;case 2: List(); break;case 3: Delete(); break;case 4: Find(); break;case 5: Alter(); break;case 6: exit(0); break;case 7: creat(); fclose(fp);default:.j11 j11 AnnTifTi tit*t不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不门)printf(ntThe num should 1-6n);printf(ntThe num should 1-6n);j / 11 j11 AnnT

37、ifTi tit*t不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不门)break;while(1);7程序运行结果开始运行显示界面:mmmmmPlease make a choice below*.Add a piece of nieg.List all the neg-Delete a piece of meg4-Find a piece of neg5.Alter a piece of meg6 .Saue and Quit7.Create an address bookNHXMtJCNj(i nput oLir Clio ice : xnkkxnh

38、xnwxnhxnh选择1,添加联系人:n put Y q up CJiQ ic e :xkkjckkjckkxn put Y q up CJiQ ic e :xkkjckkjckkx1* C:Use rs Adm i mist ratorDesktopS_SDebugCppl.exeMMMMMpiease make a choice beloi-jAdd a piece of nefList all the megDe lets a piece of megFind a piece o megAlter a piece of neg6.Save and QuitCreate an addres

39、s bookMuxnput Voup Cho ice - mkmkkmkkmmmmkkmkmmmxmmmmmPlease input the sbJ s message:mmmmmmmmmmname :石噂Addr:中国地质大学phnum:-Add a piece of neg_List all the meg3.Delete a piece of meg4-Find a piece of meg5.Altep a piece cf meg6.Save and Quit 7-Create an address bookkxkkxkkxmPlease input the sbJ s messag

40、e:xkkxkkxkkx name :石博:中国地质大学phnum:1552719emai:10449km:N胃m:km:N胃m:耳Nh耳買:k耳WELCOME TO USE? xhjn:mjcn:kj)ckjcnkh刊TTp:中国地质大学kjcnj(耳耳nhi np(_it onr Ghoice : :wnk:kjn:mjcn:kj)cj(jcx賈najgt石博K)CN J(耳耳NHXWHXNHSKN J(耳NKJCN KKXNJCNKHXNWJCNHXjC K)CM KMX 鼻耳选择2,显示所有的联系人:MKKMKpiease make a choice be low* 1Add a pi

41、ece of neg2List all the neg3Delete a piece of meg 4Find a piece of nec( 5Altep a piece of megr 6Save and Quit?Create an address book查找联系人:1 C:UsersAdministratorDe s ldopF 建文 SDe b u gC p pl. exe耳NKJCWNHXNJCNK 耳 IJELCOHE T 0 USE? mmmmmmmmmmmmmmmMMMMMPlease make a choice beAdd a piece of megList all the megDelete a piece of meg4-Find a piece o neg5.Alter a piece of meg6.Save and Quit7.Create an address book耳NxjcwHHxl nput VoLir Cho ice - :mxn:kxm(m:n:kxn:kxn:k4mmmmmmmSearch by name or phpnurn?mmmmmhamen =0)phnurnmmmmmmmmm mmmmmmmI p p

温馨提示

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

评论

0/150

提交评论