c语言课程设计.docx
- 文档编号:24581060
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:23
- 大小:244.08KB
c语言课程设计.docx
《c语言课程设计.docx》由会员分享,可在线阅读,更多相关《c语言课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
c语言课程设计
中国地质大学
本科生课程论文
课程名称c语言课程设计
教师姓名
本科生姓名
本科生学号
本科生专业
所在院系
类别:
手机通信录管理系统
日期:
课程设计评语
对课程论文的评语:
平时成绩:
课程论文成绩:
总成绩:
评阅人签名:
注:
1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目录
课程设计评语1
目录2
1.课程论文题目3
2.程序设计思路4
3.功能模块图4
4.数据结构设计6
5.算法设计6
6.程序代码9
7.程序运行结果19
8.编程中遇到的困难及解决方法23
9.总结心得及良好建议24
10.致谢26
一.课程论文题目
编号12:
手机通信录管理系统
●查看功能:
选择此功能时,列出下列三类选择。
✧办公类
✧个人类
✧商务类
当选中某类时,显示出此类所有数据的姓名和电话号码。
●增加功能:
录入新数据。
一个节点包括姓名,电话号码,分类(办公类,个人类,商务类),电子邮件信息等。
当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,储存空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。
●修改功能:
选中某个人的姓名时,可对此人的相应数据进行修改。
●删除功能:
选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。
二.程序设计思路
根据题目要求,建立文件储存信息。
数据文件名:
contact.txt通信录的信息需要写入到此文件中,并且能从文件中执行读写操作。
应选择结构体数组来存放数据,在定义一个全局变量和文件指针进行程序运行。
一个记录对应—个联系人,每个记录中依次存放姓名,电话号码,类别,电子邮件。
根据要求,此程序需要设计以下四个模块:
添加新通信录模块,删除指定通信录板块,查看指定通信录信息模块,修改指定通信录信息模块。
除了这四个主要模块,还要提供结构体和文件的输入输出操作的模块。
为简便起见,还应建立一个主菜单;另外,还要提供键盘式选择菜单来实现选择功能,使程序在运行时达到要求。
主函数中调用菜单函数。
三.功能模块图
根据题目要求,可以将系统分为:
✧查看功能:
✧增加功能
✧修改功能
✧删除功能
四.数据结构设计
●数据分析:
每个联系人的数据如下:
姓名字符串
电话号码字符串
类别字符串
邮箱字符串
采用结构体存放每首歌曲的数据
structcontact
{charname[5];姓名
chartel[12];电话号码
chartype[10];类别
charemail[6];邮箱
}con[N];
五.算法设计
●主函数:
主函数设计得比较简便,只含有目录函数。
●主目录
主菜单函数提供用户对系统功能的选择,包括查看联系人、增加联系人、修改联系人、删除联系人。
程序如下,这样编写的目的在于系统执行完每部分模块后能够方便返回到系统界面。
●增加函数
先判断m是否小于N,当通信录中超过15条信息时,储存空间已满,不能再录入新数据;检查是否录入了重复的姓名和电话号码,当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入,返回菜单;将录入的新数据存入文件,并且录入的新数据能按递增的顺序自动进行条目编号。
;
●修改函数
首先显示所有信息,以便用户确认所要修改的信息。
选中某个人的姓名时,可对此人的相应数据进行修改。
将信息存入文件。
●查看函数
择此功能时,列出下列三类选择。
办公类,个人类,商务类。
当选中某类时,通过字符串比较函数找出信息,并显示出此类所有数据的姓名和电话号码。
●删除函数
首先显示所有信息,以便用户确认所要删除的信息。
当输入姓名时,通过字符串比较函数找出指定联系人信息。
通过for循环,从要删除的那组信息开始,将后面一组的数据赋给前面一组的数据,完成删除功能,并保留原通信录联系人顺序。
结束后,返回主目录。
六.程序代码
#include
#include
#include
#include
#defineN15
structcontact
{charname[5];
chartel[12];
chartype[10];
charemail[6];
}con[N];
intload()//将文件中的数据加载至结构体中//
{
FILE*fp;
inti,count=0;
if((fp=fopen("D:
\\contact.txt","rb"))==NULL)//以只读方式打开一个文件//
{printf("\ncannotfindinformation");}
for(i=0;(!
feof(fp));i++)
{
fread(&con[i],sizeof(structcontact),1,fp);count++;
}
fclose(fp);//关闭文件//
returncount-1;}//返回现有联系人数量//
voidsave(intm)//储存信息到文件中//
{FILE*fp;
if(m==0)//文件中还未存任何数据//
{
if((fp=fopen("D:
\\contact.txt","wb"))==NULL)
{printf("\ncannotfindinformation");}
fwrite(&con[0],sizeof(structcontact),1,fp);
fclose(fp);
}
else
{
if((fp=fopen("D:
\\contact.txt","ab"))==NULL)
{printf("\ncannotfindinformation");}
fwrite(&con[m],sizeof(structcontact),1,fp);
fclose(fp);
}
}
voidlook()//查看模块//
{
voidmenu();
intm,i,w=0;
chara[20];
m=load();
printf("enterthetypeyouwanttolook\n");//显示某类数据//
printf("office\n");
printf("personal\n");
printf("business\n");
scanf("%s",a);
for(i=0;i { if(strcmp(con[i].type,a)==0) { printf("%s,%s,%s,%s\n",con[i].name,con[i].tel,con[i].type,con[i].email);w=1; } } if(w==0)printf("thistypedoesn'texist\n"); menu(); } voidadd()//数据添加模块// { voidmenu(); intt,m,w=1,i; m=load(); if(m==N) printf("thereisnoterabytestosave\n"); else{printf("entertheinformation\n"); printf("name: \n");scanf("%s",con[m].name); printf("tellphone: \n");scanf("%s",con[m].tel); printf("type: \n");scanf("%s",con[m].type); printf("email: \n");scanf("%s",con[m].email); }//数据输入到结构体// printf("Areyousuretosave? 1.yes2.no\n"); scanf("%d",&t); if(t==1) { for(i=0;i if(strcmp(con[i].name,con[m].name)==0)//检查姓名是否重复// { printf("namehasexisted! cannotsave! returntothemenu"); w=0; menu(); } for(i=0;i if(strcmp(con[i].tel,con[m].tel)==0)//检查电话号码是否重复// { printf("telephonenumberhasexisted! cannotsave! returntothemenu");w=0; menu(); } if(w==1) { save(m);printf("theinformationhasbeensaved\nreturntothemenu\n");}menu();//储存信息到文件中// } if(t==2){printf("returntothemenu\n");menu();} } voidmodify()//数据修改模块// {voidmenu(); inti,m,w=0,n; FILE*fp; charnamen[20]; m=load(); printf("therefollowsalltheinformations: \n"); for(i=0;i printf("%s,%s,%s,%s\n",con[i].name,con[i].tel,con[i].type,con[i].email); //显示所有信息,以便用户确认所要修改的信息// printf("pleaseinputthenamethatyouwanttomodify: \n"); scanf("%s",namen);//选中联系人姓名// for(i=0;i { if(strcmp(con[i].name,namen)==0)n=i; } printf("entertheinformationyouwanttomodify\n"); printf("name: \n");scanf("%s",con[n].name); printf("tellphone: \n");scanf("%s",con[n].tel); printf("type: \n");scanf("%s",con[n].type); printf("email: \n");scanf("%s",con[n].email);//修改此人信息// for(i=0;i save(i);//将修改后的信息存入文件// menu(); } voiddelet()//数据删除模块// {voidmenu(); inti,t,m,n; charnamew[20]; m=load(); printf("therefollowsalltheinformations: \t");//显示所有信息// for(i=0;i printf("\n%s,%s,%s,%s",con[i].name,con[i].tel,con[i].type,con[i].email); printf("pleaseinputthenamethatyouwanttodelete\n"); scanf("%s",namew); for(i=0;i { if(strcmp(namew,con[i].name)==0)//选中姓名// { printf("\n%s,%s,%s,%s",con[i].name,con[i].tel,con[i].type,con[i].email);n=i; } } printf("\nAreyousuretodeletethisinformation? 1,yes2,no\n"); scanf("%d",&t); if(t==2) { printf("informationnotdeleted! Pressanykeytobacktomenu\n"); getchar(); menu(); } if(t==1) { for(i=n;i con[i]=con[i+1];//将后面的数据赋给前面// } for(i=0;i save(i);menu();} voidmenu()//目录// {intn,w=0; printf("************************menu**********************************\n"); printf("***********************1.lookcontacts***********************\n"); printf("***********************2.addcontacts************************\n"); printf("***********************3.modifyinformation******************\n"); printf("***********************4.deleteinformation******************\n"); printf("chooseyournumber(1-4): \n"); scanf("%d",&n); if(n>=1&&n<=4)w=1; elseprintf("error"); while(w) {switch(n) { case1: look();break; case2: add();break; case3: modify();break; case4: delet();break; } } } main()//主函数// {menu();} 七.程序运行结果 功能一: 查看功能 功能二: 增加联系人 功能三: 修改功能 功能四: 删除功能 八.编程中遇到的困难及解决方法 在一开始拿到题目时,对于第一次独自设计的我来说,感到比较困难,所以基本没有思路。 于是首先参看了《c语言课程设计及学习指导》第五章的示例,然后上网看了XX文库中的三份课程设计报告。 再有思路后就开始自己写代码,完成课程设计。 由于是自己编写代码,有很多部分都出现了错误,第一次编译时,出现了22个错误,有很大一部分是因为漏掉分号或括号。 其中括号的问题比较严重,代码中用了很多if的嵌套,括号打得有些混乱。 不过经过仔细地检查修改后,通过了编译。 在运行过程中,也出现了很多问题。 一开始四个模块中有三个不能正常运行,仅仅可以将数据写入文件中,当将数据从文件中读出来是则是乱码。 后来将程序的读写模块都做了修改,终于能将文件信息正确读写。 修改和删除模块的问题都是会除了修改删除我指定的那一组数据外,还会把第一组删除,于是我判断是load()(读文件模块)出了问题,修改后可正常运行。 除此之外,运行过程中也会有一些别的小错误,比如函数返回值的错误,循环控制的错误,漏掉关闭文件操作等等导致的功能不能完全达到,在自己慢慢地修改和学姐的帮助下逐渐解决。 九.总结心得及良好建议 通过这个实习,将书本上生硬的语法点,转化成可以执行的程序。 我巩固了所学的知识并且将理论与实际相结合,对c语言的知识有了更深的了解。 本程序对我来说比较复杂,其中要调用的函数较多。 可在了解到结构化程序设计的思想后,我发现结构化程序设计让本身庞大复杂的程序变得结构清晰起来,更加便于编写以及修改。 同时,我也体会到编写程序过程中的严谨思维。 在编写过程中,任何的粗心,都可能使代码无法编译,就算编译成功,也可能使程序无法运行处想要的结果。 因此,在编写程序时,需要有严谨的思维。 另外耐心也非常重要,当我调了一上午都没有解决修改函数的问题时,我确实不太耐心了,越急就越找不出问题,只有当调整好心态,再仔细检查时,才发现问题然后改正。 在此次实习中,我也发现了对一些计算机C语言知识掌握的不足。 做起题来又迅速正确率又高,考试也都是九十多分,但这并不适用于实际操作,上机时并不像做题时那样熟练,有着许多欠缺。 还不能熟练的运用知识,运用时甚至对一些基本知识混淆,以至于在编程和调试时浪费了很多时间。 操作中还出现了一些逻辑上的问题,这些都是我需要改进的地方。 这次实习的机会,让我更清楚地认识了自己的不足,及时地改正并完善自己,使知识熟练应用。 我认为这次实习对于我是非常有意义的,对于注重理论学习而忽视动手实践的我来说,我的动手能力有了很大的提高,复习了以前所学的知识,掌握了一些陌生知识,并且还对我有关专业的学习提供了帮助,这次C语言课程设计实习让我受益匪浅。 十.致谢 感谢这几天来老师和学姐的教导,对我的提出的每个问题都很耐心的回答,使我能顺利的完成此次的实习任务,也让我学到了很多东西。 此次的上机实习对我以后的学习会有很大的帮助。 老师和学姐这几天从早到晚陪我们呆在机房,帮我们解惑答疑,十分感谢你们的付出。 另外,还要感谢和我共同学习,共同进步的同学们,在我和他们的交流讨论中,让我学习到了许多以前忽视的知识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计