编程实习报告.docx
《编程实习报告.docx》由会员分享,可在线阅读,更多相关《编程实习报告.docx(13页珍藏版)》请在冰豆网上搜索。
编程实习报告
编
程
实
习
报
告
姓名:
学院:
自动化
学号:
班级:
09062813
指导老师:
朱胜利/王春林
一、实习目的:
通过编写程序复习大一所学的C语言知识,学习在MicrosoftVisualC++环境下编辑、编译及运行C程序。
二、实习任务
在熟练掌握C语言基础下设计并实现一个学生信息系统,管理一个班的学生的基本信息。
每个学生的信息名片包含的主要信息有:
姓名、电话、手机、学号、四项信息。
要求该软件实现以下功能:
1.创建学生信息联表
2.添加学生信息
3.删除学生信息
4.查找学生信息
5.显示所有学生信息
6.保存链表数据到文件
7.修改学生信息
三、程序流程图(见附录)
四、原代码:
#include
#defineCH30/*最大字符数,可修改*/
typedefstructstudent
{
charname[CH];/*姓名*/
intage;/*年龄*/
chartel[CH];/*电话*/
intnum;/*学号*/
structstudent*next;
}s_Student;
s_Student*creat_node()
s_Student*nodePtr=(s_Student*)malloc(sizeof(s_Student));
if(nodePtr!
=NULL)
printf("姓名:
");
scanf("%s",nodePtr->name);
printf("年龄:
scanf("%d",&nodePtr->age);
printf("电话:
scanf("%s",nodePtr->tel);
printf("学号:
scanf("%d",&nodePtr->num);
}
else
printf("内存溢出!
\n");
returnnodePtr;
s_Student*creat_list(s_Student*head)//创建链表函数
inti;
s_Student*p1,*p2;
intnum_node;
printf("输入学生人数及资料\n");
printf("人数:
scanf("%d",&num_node);
if(num_node<=0)
returnhead;
printf("第1个学生\n");
p1=p2=creat_node();//这里创建了一个节点
if(p1==NULL)
head=p1;
for(i=1;i{if(num_node==1){head->next=NULL;break;}else{printf("第%d个学生\n",i+1);p1=creat_node();if(p1==NULL)break;p2->next=p1;p2=p1;}}p2->next=NULL;returnhead;}voidprint(s_Student*head)//显示链表信息{printf("输出学生信息:\n");while(head!=NULL){printf("姓名:%s,年龄:%d,电话:%s,学号:%d\n",head->name,head->age,head->tel,head->num);head=head->next;}}s_Student*find(s_Student*head)//查询学生信息{charname[CH];printf("输入学生姓名:");scanf("%s",name);while(strcmp(name,head->name)!=0&&head->next!=NULL)head=head->next;if(strcmp(name,head->name)==0){printf("姓名:%s,年龄:%d,电话:%s,学号:%d\n",head->name,head->age,head->tel,head->num);returnhead;}else{printf("学生%s不存在链表中\n",name);returnNULL;}}s_Student*del(s_Student*head)//删除学生信息{s_Student*p1,*p2;p1=head;charname[CH];printf("请输入要删除的学生的姓名:");scanf("%s",name);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;elsep2->next=p1->next;free(p1);printf("删除成功\n");}elseprintf("学生%s不存在链表中\n",name);returnhead;}s_Student*insert(s_Student*head)//增加学生信息{s_Student*p=creat_node();if(p==NULL){printf("添加学生失败\n");returnhead;}p->next=head;head=p;returnhead;}voidmodify(s_Student*head)//修改学生信息{structstudent*p1;intn;charname[CH];p1=find(head);if(p1!=NULL){printf("1.修改姓名\n");printf("2.修改年龄\n");printf("3.修改电话\n");printf("4.修改学号\n");printf("请选择菜单编号:");scanf("%d",&n);switch(n){case1:printf("输入新姓名:");scanf("%s",p1->name);break;case2:printf("输入新年龄:");scanf("%d",&p1->age);break;case3:printf("输入新电话:");scanf("%s",p1->tel);break;case4:printf("输入新学号:");scanf("%d",&p1->num);break;default:printf("请在1-4之间重新选择\n");}}return;}voidsave(s_Student*head)//保存链表数据到文件{s_Student*p;FILE*fp=fopen("wanlin.txt","w");if(fp==NULL)//fopen函数使变量w与文件mm.txt相连{perror("打开文件失败");return;}printf("\n正在保存......\n");p=head;while(p!=NULL){printf("姓名:%s,年龄:%d,电话:%s,学号:%d\n",p->name,p->age,p->tel,p->num);if(1!=fwrite(p,sizeof(s_Student),1,fp)){perror("写文件失败");fclose(fp);return;}p=p->next;}fclose(fp);//关闭文件printf("保存成功!\n");}s_Student*load(s_Student*head)//把链表从文件中读入到新的链表中{s_Student*p1,*p2;FILE*fp=fopen("wanlin.txt","rb");//mm.txt为文件名,rb为只读使用方式if(fp==NULL){perror("打开失败");returnNULL;}printf("\n------文件读取!------\n");p1=(s_Student*)malloc(sizeof(s_Student));if(p1==NULL){printf("内存溢出!\n");returnNULL;}head=p1;while(feof(fp)==0)//feof函数判断文件是否读到末尾!=0isEOF{if(1!=fread(p1,sizeof(s_Student),1,fp))//fread为读入函数break;printf("姓名:%s,年龄:%d,电话:%s,学号:%d\n",p1->name,p1->age,p1->tel,p1->num);p1->next=(s_Student*)malloc(sizeof(s_Student));if(!p1->next){printf("溢出内存!\n");returnhead;}p2=p1;p1=p1->next;}p2->next=NULL;fclose(fp);printf("----成功读取文件!----\n");returnhead;}voiddestory(s_Student*head){s_Student*p;while(head!=NULL){p=head;head=p->next;free(p);}}intmain(){intch;s_Student*head=NULL;while(1){printf("\n*********学生信息系统*********\n");printf("\n系统功能菜单\n");printf("----------------------------\n");printf("1.创建学生信息链表\n");printf("2.显示学生信息\n");printf("3.删除学生信息\n");printf("4.增加学生信息\n");printf("5.保存学生信息\n");printf("6.查询学生信息\n");printf("7.修改学生信息\n");printf("8.加载学生信息\n");printf("9.退出学生信息系统\n");printf("\n建议每次退出系统前保存\n第一次使用该系统勿选加载\n");printf("----------------------------\n");printf("请选择菜单编号:");scanf("%d",&ch);switch(ch){case1:head=creat_list(head);break;case2:print(head);break;case3:head=del(head);break;case4:head=insert(head);break;case5:save(head);break;case6:find(head);break;case7:modify(head);break;case8:head=load(head);break;case9:printf("退出系统\n");destory(head);return0;default:printf("请在1-9之间重新选择\n");}}destory(head);return0;}五、程序运行图主界面部分运行结果: 六、心得体会:程序设计是一门实践性很强的课程,对C程序设计者初学者而言,除了学习、熟记C语言的一些语法规则外,更重要的是多读程序,懂动手编程序。先模仿,在模仿的基础上改进,在改进的基础上提高。做到善于思考,边学边练,举一反三,学会“小题大做”,一题多解。学过的知识会应用才能体现出它的价值。C语言作为广为流行的计算机程序设计语言,对于跟程序有关的专业学生是必须掌握的。这次实习让我重温了编写一个简单程序的步骤,认识到自己在程序编写还是那么的缺少经验。
if(num_node==1)
head->next=NULL;
break;
printf("第%d个学生\n",i+1);
p1=creat_node();
p2->next=p1;
p2=p1;
p2->next=NULL;
voidprint(s_Student*head)//显示链表信息
printf("输出学生信息:
while(head!
%s,年龄:
%d,电话:
%s,学号:
%d\n",head->name,head->age,head->tel,head->num);
head=head->next;
s_Student*find(s_Student*head)//查询学生信息
charname[CH];
printf("输入学生姓名:
scanf("%s",name);
while(strcmp(name,head->name)!
=0&&head->next!
if(strcmp(name,head->name)==0)
printf("学生%s不存在链表中\n",name);
returnNULL;
s_Student*del(s_Student*head)//删除学生信息
p1=head;
printf("请输入要删除的学生的姓名:
while((strcmp(p1->name,name)!
=0)&&(p1->next!
=NULL))//字符串比较函数
p1=p1->next;
if(strcmp(p1->name,name)==0)
if(p1==head)//是头节点
head=p1->next;
p2->next=p1->next;
free(p1);
printf("删除成功\n");
s_Student*insert(s_Student*head)//增加学生信息
s_Student*p=creat_node();
if(p==NULL)
printf("添加学生失败\n");
p->next=head;
head=p;
voidmodify(s_Student*head)//修改学生信息
structstudent*p1;
intn;
p1=find(head);
if(p1!
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改电话\n");
printf("4.修改学号\n");
printf("请选择菜单编号:
scanf("%d",&n);
switch(n)
case1:
printf("输入新姓名:
scanf("%s",p1->name);break;
case2:
printf("输入新年龄:
scanf("%d",&p1->age);break;
case3:
printf("输入新电话:
scanf("%s",p1->tel);break;
case4:
printf("输入新学号:
scanf("%d",&p1->num);break;
default:
printf("请在1-4之间重新选择\n");
return;
voidsave(s_Student*head)//保存链表数据到文件
s_Student*p;
FILE*fp=fopen("wanlin.txt","w");
if(fp==NULL)//fopen函数使变量w与文件mm.txt相连
perror("打开文件失败");
printf("\n正在保存......\n");
p=head;
while(p!
%d\n",p->name,p->age,p->tel,p->num);
if(1!
=fwrite(p,sizeof(s_Student),1,fp))
perror("写文件失败");
fclose(fp);
p=p->next;
fclose(fp);//关闭文件
printf("保存成功!
s_Student*load(s_Student*head)//把链表从文件中读入到新的链表中
FILE*fp=fopen("wanlin.txt","rb");//mm.txt为文件名,rb为只读使用方式
if(fp==NULL)
perror("打开失败");
printf("\n------文件读取!
------\n");
p1=(s_Student*)malloc(sizeof(s_Student));
while(feof(fp)==0)//feof函数判断文件是否读到末尾!
=0isEOF
=fread(p1,sizeof(s_Student),1,fp))//fread为读入函数
printf("姓名:
%s,年龄:
%d\n",p1->name,p1->age,p1->tel,p1->num);
p1->next=(s_Student*)malloc(sizeof(s_Student));
if(!
p1->next)
printf("溢出内存!
printf("----成功读取文件!
----\n");
voiddestory(s_Student*head)
head=p->next;
free(p);
intmain()
intch;
s_Student*head=NULL;
while
(1)
printf("\n*********学生信息系统*********\n");
printf("\n系统功能菜单\n");
printf("----------------------------\n");
printf("1.创建学生信息链表\n");
printf("2.显示学生信息\n");
printf("3.删除学生信息\n");
printf("4.增加学生信息\n");
printf("5.保存学生信息\n");
printf("6.查询学生信息\n");
printf("7.修改学生信息\n");
printf("8.加载学生信息\n");
printf("9.退出学生信息系统\n");
printf("\n建议每次退出系统前保存\n第一次使用该系统勿选加载\n");
scanf("%d",&ch);
switch(ch)
head=creat_list(head);break;
print(head);break;
head=del(head);break;
head=insert(head);break;
case5:
save(head);break;
case6:
find(head);break;
case7:
modify(head);break;
case8:
head=load(head);break;
case9:
printf("退出系统\n");destory(head);return0;
printf("请在1-9之间重新选择\n");
destory(head);
return0;
五、程序运行图
主界面
部分运行结果:
六、心得体会:
程序设计是一门实践性很强的课程,对C程序设计者初学者而言,除了学习、熟记C语言的一些语法规则外,更重要的是多读程序,懂动手编程序。
先模仿,在模仿的基础上改进,在改进的基础上提高。
做到善于思考,边学边练,举一反三,学会“小题大做”,一题多解。
学过的知识会应用才能体现出它的价值。
C语言作为广为流行的计算机程序设计语言,对于跟程序有关的专业学生是必须掌握的。
这次实习让我重温了编写一个简单程序的步骤,认识到自己在程序编写还是那么的缺少经验。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1