杭州电子科技大学通讯录报告.docx
《杭州电子科技大学通讯录报告.docx》由会员分享,可在线阅读,更多相关《杭州电子科技大学通讯录报告.docx(18页珍藏版)》请在冰豆网上搜索。
杭州电子科技大学通讯录报告
《编程实习报告》
学院:
专业:
班级:
学号:
姓名:
指导老师:
通讯录的设计与实现
(1)实习目的
进一步巩固C语言基础知识
学习程序设计的一般方法
锻炼程序设计和实现的能力
初步具备采用面向过程的方法设计较为复杂系统的程序设计能力
为进一步学习OOP、DataBase以及其它高级软件技术和从事计算机有关的工作奠定基础
(二)实习要求
程序运行结果正确,操作方便,界面美观,逻辑层次清楚,程序结构合理,文档规范清晰。
(三)通讯录的功能要求
添加链表:
在链表头、链表中间和链表尾添加新的节点;
删除链表:
可以根据链表节点的序列进行删除,如删除第一个节点、第n个节点和最后一个节点,然后显示新的链表。
链表查找:
根据链表序号、姓名和成绩来查找节点并显示之;
保存文件和读文件数据:
是将创建的链表或者添加、删除节点后的链表的数据保存到C盘下的myphone.txt文件中,这样下次开机时,通过读取myphone.txt文件中的数据保存到新建的链表中,然后可以重新操作链表。
(四)软件开发平台的选择
选用Microsoft提供的VisualStudio套件里的VisualC++。
因为VisualC++编程环境不仅是个非常优秀的编译器,而且还将面向对象的软件设计理念与可视化编程环境融为一体。
还有在VisualC++上设计程序操作简单,程序通俗易懂
(五)总体设计
1.通讯录的整体结构图
文件导入
主菜单
创建学生信息链表添加学生信息删除学生信息查找学生信息显示所有学生信息保存链表信息到文件从文件读取链表
2.通讯录的流程图
2主程序的流程图
3.运行过程
提示选择
1.创建学生信息链表:
根据提示输入1按回车提示要要输入要创建的学生人数
输入人数后按回车提示输入学生的姓名、电话号码、地址,
每次输入一个人的姓名、电话号码、地址后按回车输入下一个学生的信息
输入完毕后按回车
2.添加学生信息
根据提示输入2按回车提示要输入添加学生的姓名、电话号码、地址
输入添加学生的姓名、电话号码、地址后按回车提示输入学生的信息要插在哪个位置,0表示第一个人,大于等于总人数表示插在最后
输入位置后回车
3.删除学生信息
根据提示输入3按回车
提示输入要删除学生的姓名
输入学生的姓名回车
4查找学生的信息
根据提示输入4回车
提示输入要查找的学生的姓名
输入姓名回车
显示该学生的信息
5.显示所有学生的信息
根据提示输入5按回车
显示所有学生信息
回车
6.保存链表数据到文件
根据提示输入6按回车
7从文件读取链表
根据提示输入7按回车
六程序代码
#include
structstudent
{
charname[30];
floattel;
charaddress[30];
structstudent*next;
};
structstudent*create(){
structstudent*p1,*p2;
structstudent*head;
inti;
intnum_node;
printf("创建包含多少个学生的通讯录\n");
scanf("%d",&num_node);
p1=p2=(structstudent*)malloc(sizeof(structstudent));printf("请输入姓名,电话号码,地址,中间用空格隔开\n");
scanf("%s%f%s",p1->name,&p1->tel,p1->address);
head=p1;
for(i=1;i{if(num_node==1){head=p1;head->next=NULL;returnhead;}else{p1=(structstudent*)malloc(sizeof(structstudent));scanf("%s%f%s",p1->name,&p1->tel,p1->address);p2->next=p1;p2=p1;}}p2->next=NULL;returnhead;}voidprint(student*head){student*p;p=head;printf("输出所有学生信息:\n");while(p!=0){printf("姓名:%s电话:%.0f地址:%s\n",p->name,p->tel,p->address);p=p->next;}}intstusum(structstudent*head){intn=0;student*p;p=head;while(p!=0){n++;p=p->next;}returnn;}structstudent*insert(structstudent*head){intn,loca;structstudent*p1,*p2,*pnew;pnew=(structstudent*)malloc(sizeof(structstudent));printf("请输入姓名电话号码地址\n");scanf("%s%f%s",pnew->name,&pnew->tel,pnew->address);n=stusum(head);printf("共有%d个节点,选择插入位置,0表示插入链表头,大于%d表示插入链表尾.\n",n,n);scanf("%d",&loca);if(loca==0){pnew->next=head;head=pnew;returnhead;}p1=head;if(loca>=n){while(p1->next!=NULL){p1=p1->next;printf("%d\n",p1);}p1->next=pnew;pnew->next=NULL;returnhead;}else{intm=0;while(p1!=NULL){m++;p2=p1;p1=p1->next;if(m==loca){p2->next=pnew;pnew->next=p1;returnhead;}}}returnhead;}structstudent*del(structstudent*head){structstudent*p1,*p2;charname[30];printf("输入删除学生姓名:\n");scanf("%s",name);if(head==NULL){printf("链表为空!\n");returnhead;}p1=head;while((strcmp(p1->name,name)!=0)&&(p1->next!=NULL)){p2=p1;p1=p1->next;}if(strcmp(p1->name,name)==0){if(p1==head){head=p1->next;free(p1);}elseif(p1->next==NULL){p2->next=NULL;free(p1);}elsep2->next=p1->next;{p2->next=p1->next;free(p1);}}elseprintf("找不到该学生!\n");returnhead;}voidsearch(structstudent*head){structstudent*p=head;booltemp=0;charname[30];printf("请输入要查找的学生姓名:\n");scanf("%s",&name);p=head;while(p!=NULL){if(strcmp(p->name,name)==0){printf("姓名:%s电话号码:%.0f地址:%s\n",p->name,p->tel,p->address);temp=1;}p=p->next;}if(!temp)printf("对不起,查无此人!!\n");}voidsave(structstudent*head){FILE*fp;structstudent*p;if((fp=fopen("C:\\myphone.txt","wb"))==NULL){printf("对不起,文件无法打开\n");exit(1);}p=head;while(p!=NULL){printf("姓名:%s电话号码:%.0f地址:%s\n",p->name,p->tel,p->address);fwrite(p,sizeof(structstudent),1,fp);p=p->next;}fclose(fp);printf("-----savesuccess!!-----\n");}structstudent*load(){structstudent*p1,*p2,*head=NULL;FILE*fp;if((fp=fopen("C:\\myphone.txt","rb"))==NULL){printf("对不起,文件无法打开\n");exit(1);}printf("\n--正在读文件--\n");p1=(structstudent*)malloc(sizeof(structstudent));if(!p1){printf("outofmemory!\n");returnhead;}head=p1;while(!feof(fp)){if(1!=fread(p1,sizeof(structstudent),1,fp))break;printf("姓名:%s电话号码:%.0f地址:%s\n",p1->name,p1->tel,p1->address);p1->next=(structstudent*)malloc(sizeof(structstudent));if(!p1->next){printf("outofmemory!\n");returnhead;}p2=p1;p1=p1->next;}p2->next=NULL;fclose(fp);printf("---Youhavesuccessreaddatafromfile!!!---\n");returnhead;}voidmain(){inta;structstudent*head;while(1){printf("\t\t\t\t学生信息系统\n");printf("\t1创建学生信息链表\n");printf("\t2.添加学生信息\n");printf("\t3.删除学生信息\n");printf("\t4.查找学生信息\n");printf("\t5.显示所有学生信息\n");printf("\t6.保存链表数据到文件\n");printf("\t7.从文件读取链表\n");printf("请输入你的选择:");scanf("%d",&a);switch(a){case1:head=create();break;case2:head=insert(head);break;case3:head=del(head);break;case4:search(head);break;case5:print(head);break;case6:save(head);break;case7:head=load();break;default:printf("\n您输入有误,请输入1到7");}}}七实习过程中遇到的错误1.中英文输入法没有切换导致的error2.输入scanf()函数的格式有错误3.有的时候可以运行的程序还是会出现错误,这个时候可以重新打开VC6.0,再次输入程序就可以了。4.在写插入学生信息程序时,对于有的判断条件不是很清楚,导致插入的节点可能向上移了一位,这时候通过增加一就可以改正了。八心得体会本次编程实习使我对于链表和文件操作有了一定的了解,对于设计一些比较大的C语言程序不会感到害怕。我知道通过模块化可以极大地增加程序的可读化,使得主程序得到简化。不会像之前我们初学C语言时,主程序比较庞大,冗杂。这次实习同时使我饿补了以前遗忘的C语言知识,对于编程要考虑的细节问题要仔细想想。这次我最值得学的东西就是老师教的C语言的调试程序方法,通过设置断点,从自己要调试的起点开始,将要调试的变量拖到地下的变量框中,一步一步地向下运行,发现自己的设计问题,使我逐渐学会了独立思考和处理问题。以后在发掘程序错误的时候,就可以自己调试处理了,对于我自学编写程序有许多帮助。在初次写程序的时候遇到了许多error,很让人头疼,然后自己一个一个地排除,最后我收获了成功。当程序员是一个十分考验个人逻辑和耐心的事,对于庞大的代码还要自己逐个查错。在运用链表时,我经常将链表指针指向的地址搞错了,为此还调试了好久。在运用文件操作的函数时经常忘记其输出的结果是什么,结果对其输出结果的判断经常出错。总的来说,这次编程实习的意义重大,它使我对编程有了一点乐趣,发现自己可以编写一些比较实用的程序。编程的能力是建立在我们不断的练习上的。暑假里我要好好将C语言重新学一次,改善自己薄弱的编程能力。
if(num_node==1)
head->next=NULL;
returnhead;
}
else
p1=(structstudent*)malloc(sizeof(structstudent));
p2->next=p1;
p2=p1;
p2->next=NULL;
voidprint(student*head)
student*p;
p=head;
printf("输出所有学生信息:
\n");
while(p!
=0)
printf("姓名:
%s电话:
%.0f地址:
%s\n",p->name,p->tel,p->address);
p=p->next;
intstusum(structstudent*head)
intn=0;
n++;
returnn;
structstudent*insert(structstudent*head)
intn,loca;
structstudent*p1,*p2,*pnew;
pnew=(structstudent*)malloc(sizeof(structstudent));
printf("请输入姓名电话号码地址\n");
scanf("%s%f%s",pnew->name,&pnew->tel,pnew->address);
n=stusum(head);
printf("共有%d个节点,选择插入位置,0表示插入链表头,大于%d表示插入链表尾.\n",n,n);
scanf("%d",&loca);
if(loca==0){
pnew->next=head;
head=pnew;
p1=head;
if(loca>=n)
while(p1->next!
=NULL)
p1=p1->next;
printf("%d\n",p1);
p1->next=pnew;
pnew->next=NULL;
else{
intm=0;
while(p1!
m++;
if(m==loca)
p2->next=pnew;
pnew->next=p1;
structstudent*del(structstudent*head)
printf("输入删除学生姓名:
scanf("%s",name);
if(head==NULL)
printf("链表为空!
while((strcmp(p1->name,name)!
=0)&&(p1->next!
=NULL))
if(strcmp(p1->name,name)==0)
if(p1==head)
head=p1->next;
free(p1);
elseif(p1->next==NULL)
p2->next=p1->next;
p2->next=p1->next;
printf("找不到该学生!
voidsearch(structstudent*head)
structstudent*p=head;
booltemp=0;
printf("请输入要查找的学生姓名:
scanf("%s",&name);
if(strcmp(p->name,name)==0)
%s电话号码:
temp=1;}
if(!
temp)
printf("对不起,查无此人!
!
voidsave(structstudent*head)
FILE*fp;
structstudent*p;
if((fp=fopen("C:
\\myphone.txt","wb"))==NULL)
printf("对不起,文件无法打开\n");
exit
(1);
fwrite(p,sizeof(structstudent),1,fp);
fclose(fp);
printf("-----savesuccess!
-----\n");
structstudent*load()
structstudent*p1,*p2,*head=NULL;
\\myphone.txt","rb"))==NULL)
printf("\n--正在读文件--\n");
p1)
printf("outofmemory!
while(!
feof(fp))
if(1!
=fread(p1,sizeof(structstudent),1,fp))
break;
%s\n",p1->name,p1->tel,p1->address);
p1->next=(structstudent*)malloc(sizeof(structstudent));
p1->next)
printf("---Youhavesuccessreaddatafromfile!
---\n");
voidmain()
inta;
while
(1)
printf("\t\t\t\t学生信息系统\n");
printf("\t1创建学生信息链表\n");
printf("\t2.添加学生信息\n");
printf("\t3.删除学生信息\n");
printf("\t4.查找学生信息\n");
printf("\t5.显示所有学生信息\n");
printf("\t6.保存链表数据到文件\n");
printf("\t7.从文件读取链表\n");
printf("请输入你的选择:
");
scanf("%d",&a);
switch(a)
case1:
head=create();
case2:
head=insert(head);
case3:
head=del(head);
case4:
search(head);
case5:
print(head);
case6:
save(head);
case7:
head=load();
default:
printf("\n您输入有误,请输入1到7");
七实习过程中遇到的错误
1.中英文输入法没有切换导致的error
2.输入scanf()函数的格式有错误
3.有的时候可以运行的程序还是会出现错误,这个时候可以重新打开VC6.0,再次输入程序就可以了。
4.在写插入学生信息程序时,对于有的判断条件不是很清楚,导致插入的节点可能向上移了一位,这时候通过增加一就可以改正了。
八心得体会
本次编程实习使我对于链表和文件操作有了一定的了解,对于设计一些比较大的C语言程序不会感到害怕。
我知道通过模块化可以极大地增加程序的可读化,使得主程序得到简化。
不会像之前我们初学C语言时,主程序比较庞大,冗杂。
这次实习同时使我饿补了以前遗忘的C语言知识,对于编程要考虑的细节问题要仔细想想。
这次我最值得学的东西就是老师教的C语言的调试程序方法,通过设置断点,从自己要调试的起点开始,将要调试的变量拖到地下的变量框中,一步一步地向下运行,发现自己的设计问题,使我逐渐学会了独立思考和处理问题。
以后在发掘程序错误的时候,就可以自己调试处理了,对于我自学编写程序有许多帮助。
在初次写程序的时候遇到了许多error,很让人头疼,然后自己一个一个地排除,最后我收获了成功。
当程序员是一个十分考验个人逻辑和耐心的事,对于庞大的代码还要自己逐个查错。
在运用链表时,我经常将链表指针指向的地址搞错了,为此还调试了好久。
在运用文件操作的函数时经常忘记其输出的结果是什么,结果对其输出结果的判断经常出错。
总的来说,这次编程实习的意义重大,它使我对编程有了一点乐趣,发现自己可以编写一些比较实用的程序。
编程的能力是建立在我们不断的练习上的。
暑假里我要好好将C语言重新学一次,改善自己薄弱的编程能力。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1