小弟制作了一个C语言通讯录,大家帮忙看下
/**Date : 6月26日
*Title:C语言编程实习
* Filename: 参考程序.c
* FileTag:
2008年第二学期短学期 编程实习 Demo
Tutors: xxxxxxVer 1.0
* Summary: 完成一个电话号码薄的管理程序,要求实现各种细节功能
* Detail:
在日常生活中,电话作为一种重要的通讯手段,已经成为我们学习、生活、工作的重要工具。
本实例说明了如何管理一个电话订户的信息系统,有增删改查的功能。
* 本程序使用六个函数来分别解决各项功能实现
* Version: 0.1
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 200
/* 定义结构体,并取别名为SUBS */
typedef struct subs
{
char suoxie[10];
char name[31];
char profession[31];
char address[51];
char telephone[8];
char mobilephone[12];
char e_mail[31];
char qq[16];
char MSN[21];
}SUBS;
/* 本程序将要用到的函数原型 */
void addSub();/* 增加名片 */
void modSub();/* 修改名片 */
void delSub();/* 删除名片 */
int searchSub(int);/* 查询名片 */
int rFile(SUBS *);/* 读文件,参数为要读写到文件中的结构体指针,成功返回读的记录条数,失败返回0 */
int wFile(SUBS *,int);/* 写文件,参数为要读写到文件中的结构体指针和要写的记录条数*/
int sStruct(SUBS *s, int);/* 结构体排序,参数为要排序的结构体指针,成功返回1 */
void main()
{
FILE *fp;
SUBS sub[N];
int m,n=0;
char id[8],ch;
if((fp=fopen("cards.dat","rb"))==NULL)
{
printf ("请输入注册号:");
scanf("%s",&id);
}
n=rFile(sub);
printf("欢迎 %s,您共有%d张名片!\n\n",id,n);
do /*显示运行时人机界面,提供菜单选择,等待用户输入功能键*/
{
printf("\t\t通讯录\n");
printf("\t1. 增加名片\n");
printf("\t2. 查询名片\n");
printf("\t3. 修改名片\n");
printf("\t4. 删除名片\n");
printf("\t5. 退出\n");
printf("请输入选择:");
scanf(" %c",&ch);
switch(ch)
{
case '1':
addSub();
break;
case '2':
searchSub(m);
break;
case '3':
modSub();
break;
case '4':
delSub();
break;
case '5':
exit(0);
break;
default:
printf("\n请输入选择1到6\n");
break;
}
}while(1);
fclose(fp);
}
/* 增加名片 */
void addSub()
{
SUBS sub[N];
int i=0;
i=rFile(sub);
if(i==N)/* 判断记录是否写满 */
{
printf("名片记录已满");
return;
}
do
{
printf("\t\t\t增加新名片\n\n");
printf("\n姓名的拼音缩写:");
scanf("%s",sub[i].suoxie);
printf("\n姓名:");
scanf("%s",sub[i].name);
printf("\n职务:");
scanf("%s",sub[i].profession);
printf("\n地址:");
scanf("%s",sub[i].address);
printf("\n固定电话:");
scanf("%s",sub[i].telephone);
printf("\n手机:");
scanf("%s",sub[i].mobilephone);
printf("\ne_mail:");
scanf("%s",sub[i].e_mail);
printf("\nqq:");
scanf("%s",sub[i].qq);
printf("\nMSN:");
scanf("%s",sub[i].MSN);
if(strlen(sub[i].name)!=0&&strlen(sub[i].address)!=0)
i++;
}while(strlen(sub[i].name)==0||strlen(sub[i].address)==0);/* 检查错误,直到输入完全符合要求 */
printf("名片信息已被添加%d\n",wFile(sub,i));
}
/* 修改名片 */
void modSub()
{
SUBS sub[N];
int i,j,m=0,n=0,ch;
char s[30];
n=rFile(sub);
printf("请输入姓名拼音缩写:\n");
getch(s);
searchSub(m);
printf("\t\t修改名片\n");
printf("请输入名片编号:");
scanf(" %d",&i);
printf("\t\t名片修改的具体信息\n");
j=i-1;
printf("姓名=%s\n职务=%s\n地址=%s\n固定电话=%s\n手机=%s\ne_mail=%s\nqq=%s\nMSN=%s\n",sub[j].name,sub[j].profession,sub[j].add
ress,sub[j].telephone,sub[j].mobilephone,sub[j].e_mail,sub[j].qq,sub[j].MSN);
printf("你确定要修改吗?(1/0)\n"); //确认是否要修改
scanf("%d",&ch); //输入一个整数0或1
if(ch==1) //如果确认修改整数为1
do
{
printf("\t\t\t新的修改名片信息\n");
printf("\n姓名的拼音缩写:");
scanf("%s",sub[i].suoxie);
printf("\n姓名:");
scanf("%s",sub[i].name);
printf("\n职务:");
scanf("%s",sub[i].profession);
printf("\n地址:");
scanf("%s",sub[i].address);
printf("\n固定电话:");
scanf("%s",sub[i].telephone);
printf("\n手机:");
scanf("%s",sub[i].mobilephone);
printf("\ne_mail:");
scanf("%s",sub[i].e_mail);
printf("\nqq:");
scanf("%s",sub[i].qq);
printf("\nMSN:");
scanf("%s",sub[i].MSN);
if(strlen(sub[i].name)!=0&&strlen(sub[i].address)!=0)
i++;
}while(strlen(sub[i].name)==0||strlen(sub[i].address)==0);/* 检查错误,直到输入完全符合要求 */
wFile(sub,n);
printf("修改成功!");
return;
}
/* 删除名片 */
void delSub()
{
SUBS sub[N];
int i,j,m=0,k;
char s[30];
printf("请输入姓名拼音缩写:\n");
getch(s);
searchSub(m);
printf("\t\t删除名片\n");
printf("请输入名片编号:");
scanf(" %d",&i);
printf("\t\t删除名片的具体信息\n");
j=i-1;
printf("姓名=%s\n职务=%s\n地址=%s\n固定电话=%s\n手机=%s\ne_mail=%s\nqq=%s\nMSN=%s\n",sub[j].name,sub[j].profession,sub[j].add
ress,sub[j].telephone,sub[j].mobilephone,sub[j].e_mail,sub[j].qq,sub[j].MSN);
printf("你确定要删除吗?(1/0)\n"); //确认是否要删除
scanf("%d",&k); //输入一个整数0或1
if(k==1) //如果确认删除整数为1
{
for(;j<m;j++)/* 删除名片 */
sub[j]=sub[j+1];
m--; //记录数减1
}
wFile(sub,m);
printf("删除成功!");
return;
}
/* 查询名片(模糊查询) */
int searchSub(int y)
{
SUBS sub[N];
char s[30],temp1[30],temp2[30];
int i,j,k,m=0,n,x=0;
loop:do
{
printf("请输入姓名拼音缩写:\n");
getch(s);
for(i=0;i<rFile(sub);i++)
if(strlen(sub[i].suoxie)<strlen(s))
printf("输入的拼音缩写过长,请从新输入:\n");
}while(strlen(sub[i].suoxie)<strlen(s));
for(i=0;i<rFile(sub);i++)
{
for(j=0;j<(x=strlen(s));j++)
temp1[j]=sub[i].suoxie[j];
if(strcmp(s,temp1)==0)
{
printf("姓名=%s\n职务=%s\n地址=%s\n固定电话=%s\n手机=%s\ne_mail=%s\nqq=%s\nMSN=%s\n",sub[i].name,sub[i].profession,sub[i].add
ress,sub[i].telephone,sub[i].mobilephone,sub[i].e_mail,sub[i].qq,sub[i].MSN);
m++;
break;
}
for(k=0;k<(x=strlen(s));k++)
{
temp2[k]=sub[i].suoxie[k+1];
if(strlen(temp2)<strlen(s))
break;
if(strcmp(s,temp2)==0)
{
printf("姓名=%s\n职务=%s\n地址=%s\n固定电话=%s\n手机=%s\ne_mail=%s\nqq=%s\nMSN=%s\n",sub[i].name,sub[i].profession,sub[i].add
ress,sub[i].telephone,sub[i].mobilephone,sub[i].e_mail,sub[i].qq,sub[i].MSN);
m++;
}
}
}
if(m==0)
{
printf("不能找到要查询的名片信息,需从新输入姓名拼音缩写!");
goto loop;
}
else
{
sStruct(sub,m);
for(n=0;n<m;n++)
printf("%d:
姓名=%s职务=%s地址=%s固定电话=%s手机=%se_mail=%sqq=%sMSN=%s\n",n,sub[i].name,sub[i].profession,sub[i].address,sub[i].telephon
e,sub[i].mobilephone,sub[i].e_mail,sub[i].qq,sub[i].MSN);
return m;
}
}
/* 读文件,参数为要读写到文件中的结构体指针,成功返回读出的记录条数 */
int rFile(SUBS *s)
{
FILE *fp;
int i=0;
if((fp=fopen("cards.dat","rb"))==NULL)
{
printf("不能打开名片文件!\n");
/* getch(); */
return 0;
}
else
{
rewind(fp);
while(!feof(fp))
{
fflush(fp);
fread(&s[i],sizeof(SUBS),1,fp);
i++;
}
i--;
}
fclose(fp);
return i;
}
/* 写文件,参数为要写到文件中的结构体指针,记录条数。成功返回所写记录的条数 */
int wFile(SUBS *s,int i)
{
FILE *fp;
int j;
if((fp=fopen("cards.dat","wb"))==NULL)
{
printf("不能打开名片文件!\n");
/* getch(); */
return 0;
}
else
{
for(j=0;j<i;j++)
{
fflush(fp);
fwrite(&s[j],sizeof(SUBS),1,fp);
}
}
fclose(fp);
return j;
}
/* 结构体排序,参数为要排序的结构体指针,记录条数。成功返回排序记录条数 */
int sStruct(SUBS *s, int m)
{
SUBS temp;
int i,j,k;
for(i=0;i<m-1;i++)/* 排序 */
{ k=i;
for(j=i+1;j<m;j++)
if(strcmp(s[k].suoxie,s[j].suoxie)>0)k=j;
temp=s[k];
s[k]=s[i];
s[i]=temp;
}
return m;
}
程序可以运行,可就是只能添加,不能继续下面的步骤,请大家帮帮忙