C语言实训报告Word下载.docx
《C语言实训报告Word下载.docx》由会员分享,可在线阅读,更多相关《C语言实训报告Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
![C语言实训报告Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/28/159cde6e-5310-4686-b637-6d06fc2602c6/159cde6e-5310-4686-b637-6d06fc2602c61.gif)
添加:
增加一个或几个人的通信录信息。
删除:
删除已输入的通信录信息。
查询:
根据输入的姓名查找通信录信息。
修改:
根据输入的姓名修改通信录信息。
显示:
输出所有通信录信息。
3.2设计环境
所使用的语言采用标准C,开发工具选用在Windows环境下的C-free、Win-TC或者VisualC++6.0。
3.3数据结构
本系统是对通信录的信息进行管理,通信录记录的信息采用C的结构体数据类型描述,定义如下:
structren/*定义个人资料结构体类型*/
{
charname[10];
/*姓名*/
intage;
/*年龄*/
chartel[12];
/*电话号码*/
charcity[20];
/*城市*/
charunits[30];
/*所在单位*/
charnote[20];
/*备注*/
};
3.4实现方法及主要算法分析
(1)主界面的设计:
主界面采用文本菜单的形式,各功能调用通过菜单进行选择。
采用循环处理,以便执行完某项处理后,仍可选择其他项处理。
在循环内先显示提示信息,然后读取用户输入,使用switch语句对用户的输入进行判断,分别调用相应的模块,当某模块结束后再次回到文本菜单,直到用户选择结束程序菜单,才退出循环,从而退出系统。
(2)外部文件的类型:
文件采用的二进制的文件,对文件的读写采用顺序文件的方式,并使用fread和fwrite等函数对文件进行操作。
(3)清屏函数:
一般由上一级菜单屏幕进入下一级菜单屏幕或由下一级菜单屏幕返回上一级菜单屏幕都需要清除屏幕原来显示的内容。
同时在调用程序的过程中,记录需要清屏的位置,然后修改代码,加入clrscr()函数清屏。
(4)提示信息:
一般的输入与输出需有相应的提示信息,以增加用户的交互性,增加输出的可读性,以帮助用户使用程序。
(5)设置颜色:
textbackground()、textcolor()函数设置背景和前景颜色
(6)光标定位:
gotoxy(列,行);
光标定位
3.5模块设计
根据功能要求,本系统为五大主要模块,具体模块如表所示。
表通讯录管理管理系统的模块
main()
主控函数
add()
增加个人资料
del()
删除个人资料
edit()
修改个人资料
search()
查找个人资料主函数
display()
浏览所有信息
pause()
等待'
Y'
、'
y'
n'
、‘Y’键输入
pause2()
等待任意键输入
load_rec()
统计记录数
search_name()
按姓名查找个人资料
search_city()
按城市查找个人资料
3.6处理流程
(1)通讯录主界面模块
(2)增加记录模块(3)显示记录模块
(4)删除记录
(5)修改记录
四、结论
通信录管理系统的编写,看似杂乱无头绪,实际上却并不如此。
它的每一个功能都能分成模块,有句话说的好,大事化小,小事化了。
C语言编程也正式如此,把一个大的程序分为若干相互独立的模块,这样使完成每一个模块的工作变得单纯而明确,这样不仅降低了难度还使得思路清晰,很容易编写出要做的程序,从而为设计一些较大的软件打下了良好的基础。
分析问题:
通讯录管理的整体功能都包括登陆限制、增加成员、删除成员、查看成员、修改成员、登陆口令五大板块,而查看有包括姓名查看,城市查看,年龄查看三个模块。
(1)设计的数据对象包括整形:
年龄。
字符型:
姓名、电话、城市、所在单位、备注。
(2)数据结构线性数据结构,定义人数上限为100.
算法的设计:
(1)自顶向下
现有全局,在进行整体设计,然后再进行下层的设计,逐步实现精细化。
采用这种方法能够做到胸有全局,能全盘考虑,不至于顾此失彼,头重脚轻。
(2)逐步细化
一步步地将上层的任务分解成较小的、易于实现的任务,知道可以很简单实现为止。
编写源程序:
(1)不求速度,但求质量!
一步一个脚印,编写程序时候宁可速度慢些也要尽量保证质量,做到尽量不出错。
(2)精力集中,全神贯注!
写程序时候最忌讳三心二意,这样才能思路清晰保证质量。
(3)保持一个良好的编程心态,不要被长长的代码吓到,更不要厌烦,既然同样都是写,为什么不仲满激情的去写那?
程序的编译与运行:
(1)查找错误是一件让人闹心的事,但是要注重技巧,注意平时经验的积累。
才能在最快的时间找出错误
(2)用心去查找,也许你会发现错误并不是很难找
(3)程序编译成功不要满足现状,要积极测试程序的可用性,对功能不理想,存在缺点的地方,积极的改进,完善。
五、结束语
在实训过程中,使我良好的锻炼了自己,首先是兴趣方面,通过编写通讯录管理系统使我更加喜欢编程,使我从以前的迷茫状态中解脱出来,使我了解了编程的真正意义。
我想这对我以后的人生有着很大的帮助。
其次通过编写通讯录管理系统使我对写程序有了一定的思路,不像以前无从下手,使我理解了算法的意义,使我懂得了模块化思想的好处。
通过一个星期的编写代码,使我对书本上的知识有了更深的理解,甚至有很多不懂的问题在这过程中自然而然的理解了。
对期末考试更有了信心。
在方建文老师的悉心指导下,我对C语言有了更深刻的理解,对程序的算法,数据的定义,程序的改错等方面的能力有了很大提高,自身的注意力,耐心,和对编程的兴趣有了很大增长,使我获益匪浅。
六、参考书目:
[1]周成义,汤德俊,钟菊,《C语言程序设计与数据结构》,中国铁道出版社,北京,2007年8月
[2](美)克尼汉,(美)里奇著,徐宝文,李志译
《C程序设计语言》,机械工业出版社
2004年01月
七、程序运行
系统各个模块运行调试,并附上运行结果截图。
八、附录:
(源程序清单)
/*通讯录程序*/
#defineM100
#include<
stdio.h>
stdlib.h>
string.h>
structrecord
{
charname[20];
chartele[15];
charunits[30];
voidmodi_seq(structrecordinfo[],intn);
voidcreat();
voidappend();
voiddisplay();
voidlocate();
voidmodify();
voiddele();
voiddisp_arr(structrecord*,int);
voiddisp_row(structrecord);
voiddisp_table();
voidmodi_sep(structrecord[],int);
voiddisp_str(char,int);
voidsort(structrecord[],int);
voidsort_name(structrecord[],int);
voidsort_city(structrecord[],int);
voiddele_name(structrecord[],int*);
voiddele_sequ(structrecord[],int*);
voidmain()
charchoice;
while
(1)
{
printf("
\n\n"
);
disp_str('
'
18);
通讯录管理程序\n"
*'
50);
putchar('
\n'
16);
1.通讯录信息输入\n"
2.显示通讯录信息\n"
3.通讯录记录查询\n"
4.修改通讯录信息\n"
5.通讯录记录删除\n"
disp_str('
6.建立通讯录文件\n"
7.退出通讯录程序\n"
14);
请输入代码选择(1~7)"
choice=getchar();
getchar();
switch(choice)
{
case'
1'
:
append();
break;
2'
display();
break;
3'
locate();
4'
modify();
5'
dele();
6'
creat();
7'
return1;
default:
continue;
}
}
}
voiddisp_str(charch,intn)
inti;
for(i=1;
i<
=n;
i++)
printf("
%c"
ch);
return;
voidappend()
structrecordinfo[M];
FILE*fp;
charask;
inti=0;
if((fp=fopen("
address.txl"
"
rb+wb"
))==NULL)
{printf("
can'
topenfile!
\n"
return;
while(!
feof(fp))
fread(&
info[i++],sizeof(structrecord),1,fp);
i--;
if(i==M)
纪录已满!
"
10);
添加通讯录信息(共有%d条记录)\n"
i);
17);
1.添加新的通讯纪录\n"
2.退出添加程序\n"
请输入代码选择(1~2)"
ask=getchar();
if(ask=='
)
break;
elseif(ask=='
开始添加新的纪录信息:
putchar('
清输入一下信息:
姓名:
gets(info[i].name);
\n年龄:
scanf("
%d"
&
info[i].age);
getchar();
\n电话:
gets(info[i].tele);
\n所在城市:
gets(info[i].city);
\n所在单位:
gets(info[i].units);
\n备注:
gets(info[i].note);
fwrite(&
info[i],sizeof(structrecord),1,fp);
i++;
}//while
(1)
fclose(fp);
voidcreat()
FILE*fp;
if((fp=fopen("
wb"
fclose(fp);
\n\n文件成功建立,请使用“通讯录信息输入功能”输入信息!
voiddisplay()
rb"
\n"
return;
显示通讯录信息(共有%d条记录)\n"
1.按自然顺序显示\n"
2.按排序顺序显示\n"
3.退出显示程序\n"
请输入代码选择1-3"
fclose(fp);
disp_arr(info,i);
sort(info,i);
voiddisp_arr(structrecordinfo[],intn)
charpress;
inti;
for(i=0;
n;
if(i%20==0)
disp_str('
25);
我的通讯录\n"
78);
序号"
disp_table();
%-7d"
i+1);
disp_row(info[i]);
if((i+1)%20==0)
按回车键继续显示下屏,按其他键结束显示!
请按键……"
press=getchar();
if(press!
='
按任意键继续......"
voiddisp_row(structrecordrow)
%-12s%-12s%-15s%-16s%-4d%-s\n"
row.name,row.tele,row.city,row.units,row.age,row.note);
voidsort(structrecordinfo[],intn)
通讯录排序\n"
1.按姓名排序\n"
2.按城市排序\n"
3.返回上一层\n"
请输入号码选择(1-3)"
sort_name(info,n);
sort_city(info,n);
voidsort_name(structrecordinfo[],intn)
inti,j;
structrecordinfo_t[M],temp;
for(i=0;
info_t[i]=info[i];
for(j=0;
j<
j++)
{
if(strcmp(info_t[j].name,info_t[j+1].name)>
0)
{
temp=info_t[j];
info_t[j]=info_t[j+1];
info_t[j+1]=temp;
}
}
disp_arr(info_t,n);
voidsort_city(structrecordinfo[],intn)
structrecordinfo_t[M],temp;
for(j=0;
n-i;
if(strcmp(info_t[j].city,info_t[j+1].city)>
temp=info_t[j];
info_t[j]=info_t[j+1];
info_t[j+1]=temp;
disp_arr(info_t,n);
voiddisp_table()
姓名"
8);
电话"
城市"
12);
单位"
年龄"
2);
备注\n"
voidlocate()
structrecordtemp,info[M];
charask,name[20],city[20];
intn=0,i,flag;
FILE*fp;
while(fread(&
temp,sizeof(structrecord),1,fp)==1)
info[n++]=temp;
while
(1)
flag=0;
20);
查询通讯录\n"
1.按姓名查询\n"
2.按城市查询\n"