二级C编程实训报告要求
一、任务:设计完成一个或多个C语言综合应用程序
二、报告的内容包括:
1. 程序设计的题目
2. 设计的具体任务
3. 设计的要求
4. 设计过程
5. 程序说明
6. 设计体会
三、 写作要求
1.要求独立完成设计、独立编写设计报告,若有相同者,一律视其为不合格。
2.字数不少于2000字。
3.正文格式:A4纸、小四号、宋体;
标题:加粗,宋体,四号;
打印。
备注: 封面格式见附页
天津电子信息职业技术学院 暨国家示范性软件职业技术学院
二级C编程实训报告
姓 名: 系 别: 专 业: 班 级: 指导教师: 完成时间: 2013 年1月 11日
广西科技大学计算机学院
20##年12月
《高级程序设计》
课程实训报告
题 目:通讯录管理
完 成 人:
专业班级:计Y113
学 号:
指导教师:
20##年 1 月 5日
广西科技大学计算机学院
1 题目与要求
1.1 问题提出
本人计划编写一个通讯录管理系统,主要用来管理联系人得基本信息
1.2 本系统涉及的知识点
结构、数组、循环、函数、分支、指针
1.3 功能要求
1) 能输入(从键盘)通讯录的信息(增加,输入时需要能检查该姓名的通讯录的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输入的类型是否存在)
2) 能增加通讯录信息;
3) 能查询(按姓名或者分类)通讯录的信息
4) 能修改通讯录信息;
5) 能删除指定姓名的记录信息
6) 能批量输出通讯录信息:写入指定的文件中。
7) 能批量输入通讯录信息:从指定的文件中读入。
2 功能设计
2.1 算法设计
本系统需要实现的功能要求
(1)利用switch语句设计如图1所示的主菜单:
图1 通讯录管理系统主菜单
(2)选择2后,调用查询函数,进入函数后利用if-else if语句实现一个如图2所示的菜单。
图2
3、根据所选菜单编写相应代码:
1)通讯录信息输入函数shuru():利用循环输入的方式,将有关信息存入结构数组,结构数组根据实际的人数,采用动态方式建立……
2)通讯录记录查询函数chaxun():查询某人的信息,按照姓名、手机或者QQ查找,如果找到了,则显示该人的息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。
3)修改通讯录信息函数xiugai():修改某人的信息,按照姓名或者QQ查找修改,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
4)显示通讯录信息函数xianshi():显示通讯录中的所有记录。
5)通讯录记录删除函数shanchu():删除某人的信息,按照姓名或者QQ查找,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
6)导出通讯录文件函数daochu():能将通讯录的信息写入指定的文件中。
7)导入通讯录文件函数daoru():能从指定的文件中读入通讯录的信息。
8)退出通讯录程序:结束循环退出通讯录。
2.2 部分模块流程图
3 程序代码设计(左对齐,宋体粗四号)
内容:分模块(函数)简述其功能;模块中使用的各变量的类型及作用,包括声明数据类型(如结构体);设计过程;并列出该模块(函数)的代码。(宋体小四号)。
输入模块
1)函数原形:void caidan()
2)功 能:利用while循环语句和printf、gets、getchar、swtich函数完成对菜单的显示。
3)变量及类型:
char choice :输入字符变量。
4)说明:菜单函数会循环显示。
输入模块
1)函数原形:void shuru()
2)功 能:利用for循环语句和gets、getchar、strcpy、if-elseif函数完成对结构数组的输入,存放n个通讯录信息(姓名、电话、QQ、备注)。
3)变量及类型:
char ask :输入字符变量来判断。
int i , j :循环控制变量。
4)说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。(若不需说明部分可省略)
输入模块
1)函数原形:void chaxun()
2)功 能:利用while循环语句和for、if-else if、gets、getchar函数完成对通讯录信息的查询。
3)变量及类型:
char ask :输入字符变量来判断。
int i ,k :循环控制变量。
4)说明:执行查询完后返回菜单
输入模块
1)函数原形:void xiugai()
2)功 能:利用while循环语句和for、if-else if、gets、getchar、scanf,strcmp函数完成对通讯录信息的修改。
3)变量及类型:
char sure :输入字符变量来判断。
int i ,k :循环控制变量。
char name[10]:接受输入的数组。
int flag:判断修改依据。
输入模块
1)函数原形:void xianshi()
2)功 能:利用for循环语句完成对结构数组的显示,显示通讯录的整体信息。
3)变量及类型: int i ,k :循环控制变量。
输入模块
1)函数原形:void shanchu()
2)功 能:利用while循环语句和for、if-else if、gets、getchar、scanf,strcmp函数完成对通讯录信息的删除。
3)变量及类型:
char sure :输入字符变量来判断。
int i ,k :循环控制变量。
char name[10],char qq[10]:接受输入的数组。
int flag:判断修改依据。
输入模块
1)函数原形:void daochu()
2)功 能:利用for循环语句和if、fclose、fprintf函数完成对通讯录信息的导出,导出文件为address.txt
3)变量及类型:
int i ,m :循环控制变量。
输入模块
1)函数原形:void daoru ()
2)功 能:利用for循环语句和if、fclose、fprintf函数完成对通讯录信息的导入
3)变量及类型:
int i ,m :循环控制变量。
char name[15] tele[15]; qq[15] note[15];对导入函数的接收数据
4 总结
内容:
1. 程序经过4天的调试终于在放弃文件和指针的操作,终于成型。但过程中也暴露了对这两个知识不够熟练!
参考文献(左对齐,宋体粗四号)
内容:列出课程实训中所参考的所有书目,格式如下:
[1] 张磊,C语言程序设计(第2版),北京:高等教育版社,2009.8
[2] 张磊,C语言程序设计实验与实训指导及题解,北京:高等教育版社,2009.8
附录:程序清单
#define M 100
#include
#include
#include
int i=0;
//--------------------------------------------------------------------------------------------1
struct record
{
char name[15];
char tele[15];
char qq[15];
char note[15];
}info[M];
//--------------------------------------------------------------------------------------------2
void caidan();
void shuru();
void chaxun();
void xiugai();
void xianshi();
void shanchu();
void disp_str(char,int);
void disp_table();
void daochu();
void daoru();
//--------------------------------------------------------------------------------------------3--主函数
void main()//主函数
{
caidan();
}
//--------------------------------------------------------------------------------------------4--菜单
void caidan()//菜单
{
char choice;
while(1)
{
printf("\n\n");
disp_str(' ',18);
printf("通讯录管理程序 \n");
disp_str('*',50);
printf("\n");
disp_str(' ',16);
printf("1.通讯录信息输入 \n");
disp_str(' ',16);
printf("2.通讯录记录查询 \n");
disp_str(' ',16);
printf("3.修改通讯录信息 \n");
disp_str(' ',16);
printf("4.显示通讯录信息 \n");
disp_str(' ',16);
printf("5.通讯录记录删除 \n");
disp_str(' ',16);
printf("6.导出通讯录文件 \n");
disp_str(' ',16);
printf("7.导入通讯录文件 \n");
disp_str(' ',16);
printf("8.退出通讯录程序 \n");
disp_str('*',50);
printf("\n");
disp_str(' ',14);
printf("请输入代码选择(1~8)");
choice=getchar();
getchar();
switch(choice)
{
case '1':
shuru();
break;
case '2':
chaxun();
break;
case '3':
xiugai();
break;
case '4':
xianshi();
break;
case '5':
shanchu();
break;
case '6':
daochu();
break;
case '7':
daoru();
break;
case '8':
return;
default:
continue;//输入数字在1~8之外时,继续循环显示菜单
}
}
}
//--------------------------------------------------------------------------------------------5--菜单空格和*号输出函数
void disp_str(char ch,int n)//菜单空格和*号输出函数
{
int j;
for(j=1;j<=n;j++)
printf("%c",ch);
return;
}
//--------------------------------------------------------------------------------------------6--第一个功能输入
void shuru()//第一个功能输入
{
char ask;
while(1)
{
printf("\n\n");
fflush(stdin);
printf("请输入通讯录记录\n");
printf("姓名: ");
gets(info[i].name);
printf("电话: ");
gets(info[i].tele);
printf("qq: ");
gets(info[i].qq);
printf("备注: ");
gets(info[i].note);
//检查
int j;
for(j=0;j
{
if(strcmp(info[i].name,info[j].name)==0)
{
printf("名字相同了,是否覆盖?(Y或N)");
char ch=getchar();
getchar();
if(ch=='Y'||ch=='y')
{
strcpy(info[j].name,info[i].name);
strcpy(info[j].tele,info[i].tele);
strcpy(info[j].qq,info[i].qq);
strcpy(info[j].note,info[i].note);
}
i--;
}
else
continue;
}
i++;
printf("输入后的通讯录为:\n");
xianshi();
printf("\n");
printf("继续输入记录?(Y/N)");
ask=getchar();
getchar();
if(ask!='y'&&ask!='Y')
break;
}
return;
}
//--------------------------------------------------------------------------------------------7--第二个功能查询
void chaxun()//第二个功能查询
{
char ask,name[15],qq[15],tele[15];
int k,flag;
while(1)
{
flag=0;
disp_str(' ',19);
printf("通讯录查询\n");
disp_str('*',50);
putchar('\n');
disp_str(' ',17);
printf("1.按姓名查询\n");
disp_str(' ',17);
printf("2.按 QQ 查询\n");
disp_str(' ',17);
printf("3.按手机查询\n");
disp_str(' ',17);
printf("4.返回 上层\n");
disp_str('*',50);
putchar('\n');
disp_str(' ',17);
printf("请输入代码选择(1~4)\n");
ask=getchar();
getchar();
if(ask=='1')
{
printf("请输入姓名:\n");
gets(name);
for(k=0;k
if(strcmp(name,info[k].name)==0)//比较函数
{
flag=1;
printf("\t查找成功!该人记录如下:\n");
disp_str('*',50);
printf("\n");
disp_table();
printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);
}
if(!flag)
printf("没有找到符合条件的记录!\n");
printf("请按任意键返回···");
printf("\n");
getchar();
}
else if(ask=='2')
{
printf("请输入qq:");
gets(qq);
for(k=0;k
if(strcmp(qq,info[k].qq)==0)
{
flag=1;
printf("\t查找成功!该人记录如下:\n");
disp_str('*',50);
printf("\n");
disp_table();
printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);
}
if(!flag)
printf("没有找到符合条件的记录!\n");
printf("请按任意键返回···");
printf("\n");
getchar();
}
else if(ask=='3')
{
printf("请输入手机号:");
gets(tele);
for(k=0;k
if(strcmp(tele,info[k].tele)==0)
{
flag=1;
printf("\t查找成功!该人记录如下:\n");
disp_str('*',50);
printf("\n");
disp_table();
printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);
}
if(!flag)
printf("没有找到符合条件的记录!\n");
printf("请按任意键返回···");
printf("\n");
getchar();
}
else if(ask=='4')
{
return;
}
}
}
//--------------------------------------------------------------------------------------------8--第三个功能修改
void xiugai()//第三个功能修改
{
int k,flag;
char name[10],sure;
printf("\n");
printf("\t请输入要修改人姓名:");
gets(name);
while(1)
{
for(k=0;k
if(strcmp(name,info[k].name)==0)
{
flag=1;
printf("\n");
printf("\t查找成功!该人记录如下:\n");
disp_str('*',50);
printf("\n");
disp_table();
printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);
printf("\n");
printf("确定修改请按Y,否者按其他键返回···");
sure=getchar();
getchar();
if(sure=='y'||sure=='Y')
{
printf("\n\t请输入修改后的姓名:");
scanf("%s",info[k].name);
printf("\n\t请输入修改后的电话:");
scanf("%s",info[k].tele);
printf("\n\t请输入修改后的QQ号:");
scanf("%s",info[k].qq);
printf("\n\t请输入修改后的类别:");
scanf("%s",info[k].note);
printf("\t修改成功!修改后记录如下:\n");
disp_table();
printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);
break;
}
else
return;
}
if(flag!=1)
{
printf("没有找到符合条件的记录!\n");
printf("请按任意键返回···");
printf("\n");
}
getchar();
return;
}
}
//--------------------------------------------------------------------------------------------9--第四个功能显示
void xianshi()//第四个功能显示
{
int j;
disp_table();
disp_str('*',50);
printf("\n");
for(j=0;j
{
printf("%-12s%-12s%-12s%-12s\n",info[j].name,info[j].tele,info[j].qq,info[j].note);
}
disp_str('*',50);
printf("\n");
printf("该通讯录共有%d条记录!",i);
}
//--------------------------------------------------------------------------------------------10--第五个功能删除
void shanchu()//第五个功能删除
{
char ask,name[10],qq[10];
int k,flag,l;
while(1)
{
flag=0;
disp_str(' ',19);
printf("通讯录删除\n");
disp_str('*',50);
putchar('\n');
disp_str(' ',17);
printf("1.按姓名删除\n");
disp_str(' ',17);
printf("2.按QQ删除\n");
disp_str(' ',17);
printf("3.返回上层\n");
disp_str('*',50);
putchar('\n');
disp_str(' ',17);
printf("请输入代码选择(1~3)\n");
ask=getchar();
getchar();
char sure;
if(ask=='1')
{
printf("\n");
printf("请输入姓名:\n");
gets(name);
for(k=0;k
if(strcmp(name,info[k].name)==0)
{
flag=1;
printf("\t该人记录如下:\n");
disp_table();
printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);
printf("确定删除请按Y,否者按其他键返回···");
sure=getchar();
getchar();
if(sure!='y'&&sure!='Y')
return;
for(l=k;l
info[l]=info[l+1];
printf("\t删除成功!删除后记录如下:\n");
i=i-1;
xianshi();
}
if(!flag)
printf("没有找到符合条件的记录!\n");
printf("请按任意键返回···");
printf("\n");
getchar();
}
else if(ask=='2')
{
printf("\n");
printf("请输入qq:");
gets(qq);
for(k=0;k
if(strcmp(qq,info[k].qq)==0)
{
flag=1;
printf("\t查找成功!该人记录如下:\n");
disp_table();
printf("%-12s%-12s%-12s%-12s\n",info[k].name,info[k].tele,info[k].qq,info[k].note);
printf("确定删除请按Y,否者按其他键返回···");
sure=getchar();
getchar();
if(sure!='y'&&sure!='Y')
return;
for(l=k;l
info[l]=info[l+1];
printf("\t删除成功!删除后记录如下:\n");
i=i-1;
xianshi();
}
if(!flag)
printf("没有找到符合条件的记录!\n");
printf("请按任意键返回···");
printf("\n");
getchar();
}
else if(ask=='3')
{
return;
}
}
}
//--------------------------------------------------------------------------------------------11--通讯录表头
void disp_table()//通讯录表头
{
printf("姓 名:");
disp_str(' ',6);
printf("电 话:");
disp_str(' ',6);
printf("Q Q:");
disp_str(' ',6);
printf("备 注:\n");
return;
}
//--------------------------------------------------------------------------------------------12--导出文件
void daochu()//导出文件
{
FILE *fp;
if((fp=fopen("address.txt","w"))==NULL)//只写的方式建立一个文件
{
printf("can't open file!\n");
return;
}
fprintf(fp,"%-12s%-12s%-12s%-12s\n","姓名","电话","qq","备注");
for(int m=0;m
fprintf(fp,"%-12s%-12s%-12s%-12s\n",info[m].name,info[m].tele,info[m].qq,info[m].note);
printf("\n成功导出,导出文件名为address.txt\n");
printf("请按回车键返回菜单:\n");
fclose(fp);
getchar();
}
//--------------------------------------------------------------------------------------------13--导入文件
void daoru()//导入文件
{
char name[15];
char tele[15];
char qq[15];
char note[15];
FILE *fp;
if((fp=fopen("address.txt","r"))==NULL)//只写的方式建立一个文件
{
printf("can't open file!\n");
return;
}
else
{
fscanf(fp,"%s%s%s%s",name,tele,qq,note);
int j=i;
for(int m=0;m
{
fscanf(fp,"%s%s%s%s",info[i].name,info[i].tele,info[i].qq,info[i].note);
i++;
}
printf("导入成功!\n");
printf("\n");
disp_str(' ',12);
printf("导入后的通讯录为通讯录 \n");
xianshi();
fclose(fp);
}
}
两周的工程训练实习已经结束,虽然在实习期间虽然很累、很苦,但我却感到很快乐!因为总的来说这次两周的实习活动是有趣的,并且它必将影响…
工程训练实习总结报告回想工程训练实验,实验过程中的许多细节依然清晰地浮现在脑课程:工程训练班级:信息安全1201海中。与我们平时的…
工程训练实习总结报告姓名:王子洲学号:专业:工程训练实习总结报告短暂的半学期工程训练课就这样在留恋中过去了,还记得在教学楼和工程训…
工程训练实习总结报告课程工程训练专业通信工程班级通信0903班姓名潘超20xx6051日期20xx年5月20日工程训练实习总结报告…
C语言程序设计实训总结为加强学生的实践动手能力,为贯彻落实教学计划的要求,培养学生的专业实践技能,计算机系05级计算机网络工程与管…
C语言程序设计实训总结李爱强通过此次实训,同学们能够利用C语言面向过程的编程思想来完成系统的设计,熟练掌握C语言的基本知识和技能;…
设计题目及要求设计题目及要求设计题目及要求设计题目及要求1.综合应用实例——学生成绩管理编写一个菜单驱动的学生成绩管理程序。实现如…
实训总结转眼间为期2周的数控加工与编程实训已经结束了,经过2周的实训让我学到了许多知识,回想实训这几天我确实有很大的收获。在指导老…
河北科技师范学院欧美学院实习类型教学实习实习单位河北科技师范学院欧美学院实习起止时间年月年日指导教师刘正林所在院(系)信息技术系专…