c语言程序设计报告书.docx
- 文档编号:27624551
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:31
- 大小:161.42KB
c语言程序设计报告书.docx
《c语言程序设计报告书.docx》由会员分享,可在线阅读,更多相关《c语言程序设计报告书.docx(31页珍藏版)》请在冰豆网上搜索。
c语言程序设计报告书
一、实践的目的和要求
加深对C语言课程所学知识的理解,进一步巩固C语言算法规则.学会编制结构清晰.风格良好.数据结构适当的C程序,从而具备解决综合性问题的能力.
二、内容
在熟练掌握C语言的基础知识:
数据类型(整型.实型.字符型.指针.数组.结构等);运算类型(算术运算.逻辑运算.自增自减运算.赋值运算等);程序结构(顺序结构.判断选择结构.循环结构);大程序的功能分解方法(即函数的使用)等.进一步掌握各种函数的应用以及文件的读写操作等.
三、实验任务:
通讯录
设计要求:
实现菜单设计,使用数据文件保存和修改,应用结构体和指针
功能要求:
通讯录信息生成,存储,查询,修改,插入,删除,打印等.
四、设计思路
1.通讯录的主要信息包括:
编号,姓名,性别,联系电话.住址,邮编.
2.用结构体数组来存储信息,有Data_Input函数来实现信息的录入,用Data_Show函数来显示打印信息,用Data_Sreach函数来查找信息,用Data_Insert函数来插入信息,用Data_Alter函数来修改信息,用Data_Delete函数来删除信息,用Data_Save函数来保存信息,用Exit函数来退出通讯录.
3.小组分工,每个人分配几个函数,按情况进行分配任务.
五、程序代码
#include
#include
#include
inti;
structfriend/*电子通讯录结构定义*/
{
charnum[5];/*编号*/
charname[11];/*名字*/
charsex[2];/*性别*/
charphone[12];/*电话*/
charaddress[26];/*地址*/
charpost_num[11];/*邮编*/
}friends[50];
FILE*fp;
voidData_load()/*数据载入函数*/
{intj;
fp=fopen("friend.txt","r+");/*打开文件friend.txt*/
if(fp==NULL)/*判断是否存在friend.txt,如果不存在则创建*/
{fp=fopen("friend.txt","w");
i=0;
}
else
{for(i=0;i<50;i++)
{j=fgetc(fp);
if(j==EOF)/*判断是否到了文件尾*/
return;
fseek(fp,i*sizeof(structfriend),0);
fread(&friends[i],sizeof(structfriend),1,fp);/*从文件中读取一条记录*/
}
}
}
voidMenu_Select() /*显示菜单界面*/
{
printf("\n");
printf("\n");
printf("\n");
printf("AddressBookManagementSystem\n");
printf("\n");
printf("======================\n");
printf("1.AddressbookdataEntry\n");/*数据输入*/
printf("2.AddressBookdataShow\n");/*数据显示*/
printf("3.AddressBookdataSearch\n");/*数据查找*/
printf("4.AddressBookdataAlter\n");/*数据修改*/
printf("5.AddressBookdataInsert\n");/*数据插入*/
printf("6.AddressBookdataDelete\n");/*数据删除*/
printf("7.AddressBookdataSave\n");/*数据保存*/
printf("0.Exit\n");/*退出*/
printf("======================\n");
printf("Pleasechioce0-7\n\n");
}
intData_check(intk,charID[5])/*检查通讯录中是否存在相同ID或ID输入格式错误*/
{
intj;
if(ID[0]=='0')
k=1;
for(j=0;ID[j]!
='\0';j++)
{
if(ID[j]>'9'||ID[j]<'0')
k++;
}
for(j=0;j
{
if(strcmp(ID,friends[j].num)==0)
k++;
}
returnk;
}
voidData_Input()/*数据输入函数*/
{
charyes_no='1';
charID[5];
intk=0;
if(i>=50)
printf("\n\nStoragefull!
\n\n");
if(i<50)
{
printf("************************************************************************\n");
printf("*******************AddAddressBookInformation***********************\n");
printf("************************************************************************\n");
printf("************************************************************************\n");
}
for(;i<50;i++)
{
do
{
switch(yes_no)
{
case'1':
/*如果输入为'1',则进行数据输入*/
printf("******No.(4)Name(10)Sex(M/F)Phone(11)Address(25)Zip_Code(10)*******\n");
scanf("%s%s%s%s%s%s",ID,friends[i].name,friends[i].sex,friends[i].phone,friends[i].address,friends[i].post_num);
Data_check(k,ID);
while(Data_check(k,ID)>0)/*检查输入的ID是否已存在,如果存在重新输入*/
{
printf("TheNo.alreadyexistsOrTheNo.isn'tcorrect,pleasere-enter\n");
scanf("%s",ID);
Data_check(k,ID);
}
strcpy(friends[i].num,ID);
if(i<49)
{
printf("\n\nWhethertobecontinue?
Y
(1)/N(0)\n\n");
yes_no=getch();
}
if(i>=49)
printf("\n\nStoragefull!
\n\n");
break;
case'0':
break;
default:
yes_no=getch();
}
}while(yes_no!
='1'&&yes_no!
='0');/*如果输入的不是'1'或'0'则重新输入*/
if(yes_no=='0')/*如果输入'0'则退出输入函数*/
{
i++;
break;
}
}
}
intThe_Size(chara[],charb[])/*比较两个ID的大小*/
{
intj,t;
if((j=strlen(a)-strlen(b))>0)t=1;
if((j=strlen(a)-strlen(b))<0)t=-1;
if((j=strlen(a)-strlen(b))==0)
{
if(strcmp(a,b)>0)t=1;
if(strcmp(a,b)<0)t=-1;
if(strcmp(a,b)==0)t=0;
}
returnt;
}
voidData_Show()/*数据输出函数*/
{intj,k;
charm;
structfriendt;
printf("********************************************************************\n");
printf("No.NameSexPhoneAddressZip_Code\n");
printf("********************************************************************\n");
for(j=0;j {for(k=0;k { if(The_Size(friends[k].num,friends[k+1].num)==1) { t=friends[k]; friends[k]=friends[k+1]; friends[k+1]=t; } } } for(j=0;j { printf("%4s%10s%4s%11s%20s%10s\n",friends[j].num,friends[j].name,friends[j].sex,friends[j].phone,friends[j].address,friends[j].post_num); m=getch(); if(m==’’) break; } printf("\n\nThereare%ddatainthebook.\n\n",i); } voidData_Search()/*数据查找函数*/ { chark; intj,a,b; charID[5]; charNAME[11]; printf("SearchbyNo.: 1\n"); printf("Searchbyname: 2\n"); k=getch(); switch(k) { case'1': /*按ID查找*/ a=0; printf("\n\nPleaseentertheNo.\n\n"); scanf("%s",ID); for(j=0;j { if(strcmp(ID,friends[j].num)==0) { a++; printf("No.NameSexPhoneAddressZip_Code\n"); printf("%4s%10s%4s%11s%20s%10s\n",friends[j].num,friends[j].name,friends[j].sex,friends[j].phone,friends[j].address,friends[j].post_num); } } if(a==0) printf("DonothavetofindtheNo.! \n\n"); break; case'2': /*按姓名查找*/ b=0; printf("\n\nPleaseentertheName\n\n"); scanf("%s",NAME); for(j=0;j { if(strcmp(NAME,friends[j].name)==0) { b++; printf("No.NameSexPhoneAddressZip_Code\n"); printf("%4s%10s%4s%11s%20s%10s\n",friends[j].num,friends[j].name,friends[j].sex,friends[j].phone,friends[j].address,friends[j].post_num); } } if(b==0) printf("DonothavetofindtheName! \n\n"); break; default: printf("\n\nError! \n"); break; } } voidData_Insert()/*数据插入函数*/ {if(i>=50) printf("\n\nStoragefull! \n\n"); if(i<50) { charID[5]; intk=0; printf("PleaseentertheNo.thatyouwanttoinsert.\n"); scanf("%s",ID); Data_check(k,ID); printf("%d",Data_check(k,ID));/*检查所需插入的ID是否已存在,如果存在重新输入*/ while(Data_check(k,ID)>0) { printf("TheNo.alreadyexistsOrTheNo.isn'tcorrect,pleasere-enter\n"); scanf("%s",ID); Data_check(k,ID); } strcpy(friends[i].num,ID);/*插入数据*/ printf("******Name(10)Sex(M/F)Phone(11)Address(30)Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[i].name,friends[i].sex,friends[i].phone,friends[i].address,friends[i].post_num); i++; } } voidData_Delete()/*数据删除函数*/ { intk,t=0; charID[5]; printf("\n\nPleaseentertheNo.needtobedeleted\n\n"); scanf("%s",ID); for(k=0;k { if(strcmp(friends[k].num,ID)==0) { t++; break; } } if(t==0) printf("\n\nTheNo.doesnotExist! \n\n"); if(t>0) { for(;k { friends[k]=friends[k+1]; } printf("\n\nDeletesuccess! \n\n"); i=i-1; } } voidData_Alter()/*修改函数*/ { intk,t=0; charID[5]; printf("\n\nPleaseentertheNo.tobeAmended\n\n"); scanf("%s",ID); for(k=0;k { if(strcmp(friends[k].num,ID)==0) { t++; break; } } if(t==0) printf("\n\nTheNo.doesnotExist! \n\n"); if(t>0) { strcpy(friends[k].num,ID); printf("******Name(10)Sex(M/F)Phone(11)Address(30)Zip_Code(10)*******\n"); scanf("%s%s%s%s%s",friends[k].name,friends[k].sex,friends[k].phone,friends[k].address,friends[k].post_num); printf("\n\nAlterSuccess! \n\n"); } } voidData_Save()/*数据保存函数*/ { intj; fp=fopen("friend.txt","w"); for(j=0;j<=i-1;j++) { fwrite(&friends[j],sizeof(structfriend),1,fp); } printf("\n\nSaveSuccess! \n\n"); } voidExit()/*退出函数*/ { charflag; printf("SaveorNot? (Y/N)\n");/*判断是否保存*/ do{ flag=getch(); switch(flag) { case'Y': /*保存*/ Data_Save(); break; case'y': /*保存*/ Data_Save(); break; case'N': break; case'n': break; } }while(flag! ='Y'&&flag! ='y'&&flag! ='N'&&flag! ='n'); } voidmain() {charchoose,yes_no; Data_load(); do { Menu_Select(); choose=getch(); switch(choose) { case'1': Data_Input();break;/*输入*/ case'2': Data_Show();break;/*显示*/ case'3': Data_Search();break;/*查找*/ case'4': Data_Alter();break;/*修改*/ case'5': Data_Insert();break;/*插入*/ case'6': Data_Delete();break;/*删除*/ case'7': Data_Save();break;/*保存*/ case'0': Exit();break;/*退出*/ default: printf("Error! \n"); } if(choose=='0') break; printf("Wouldyouliketobecontinue? (Y/N)\n"); do { yes_no=getch(); }while(yes_no! ='Y'&&yes_no! ='y'&&yes_no! ='N'&&yes_no! ='n'); if(yes_no=='N'||yes_no=='n') { Exit(); break; } }while(yes_no! ='Y'||yes_no! ='y'); 六、函数说明 本人所写函数为: Data_check,Data_Input,The_Size,Data_Show,main. 以下为各函数的功能说明,代码以及流程图: Data_check: 本函数的功能是判断输入的编号是否以存在及格式是否正确. 首先定义一个整型形参,一个字符数组形参. 首先判断编号的首位是否为0,如果为0则整型形参赋值为1.反之没有动作,然后判断编号内是否含义字母及其他字符,如果有则整型形参自增,反之没有动作,在使用strcmp判断输入的编号在原文件中是否以存在,如果存在则整型形参自增. 最后返回整型形参的值. 源代码: /*检查通讯录中是否存在相同ID或ID输入格式错误*/ intData_check(intk,charID[5]) { intj; if(ID[0]=='0') k=1; for(j=0;ID[j]! ='\0';j++) { if(ID[j]>'9'||ID[j]<'0') k++; } for(j=0;j { if(strcmp(ID,friends[j].num)==0) k++; } returnk; } 流程图: Data_Input: 首先判断储存是否已满,如果满了,则提示是否回到主菜单,如果没满,则提输入信息,然后调用Data_check函数,判断编号是否已经存在以及格式是否正确.如果均无误则提示是否继续输入信息,反之则重新输入编号直到编号无误为止.如果输入信息后,储存变满,则提示储存已满,不再提示是否继续输入.最后提示是否回到主菜单. 源代码: voidData_Input()/*数据输入函数*/ { charyes_no='1'; charID[5]; intk=0; if(i>=50) printf("\n\nStoragefull! \n\n"); if(i<50) { printf("************************************************************************\n"); printf("*******************AddAddressBookInformation***********************\n"); printf("************************************************************************\n"); printf("************************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 报告书