当前位置: 代码迷 >> C语言 >> [求助]通讯录系统
  详细解决方案

[求助]通讯录系统

热度:529   发布时间:2007-09-13 12:22:39.0
[求助]通讯录系统

我初学者。老师狠心叫我们编个系统。
以下是我编的通讯录管理系统。编译出来input output save这3个模块错误很多。
可是看不懂。。麻烦各位高手帮忙看看。。谢谢各位了!!!

#include<stdio.h>
#include<string.h>
#define MAX 100
#define PAGE 2
#define PRINT1 printf("--------------------------------------\n")
#define PRINT2 printf("NUM---NAME---AGE---MOBILE---ADDRESS\n")
#define PRINT3 printf("%d,%s,%d,%s,%s,\n",message[i].num,message[i].name,message[i].age,message[i].mobile[15],message[i].address);


int sum; /*用于记录人数*/


struct message_type
{
int num;
char name;
int age;
char mobile[15];
char address;

}message[MAX];


/*主模块*/

main()
{
int choice;
sum=read_message();
bioskey(0);
do
{clrscr();
printf("\n\n\n ********通讯录管理系统********\n\n" );
printf(" 1.创建资料\n\n");
printf(" 2.输出资料\n\n");
printf(" 3.资料查询\n\n");
printf(" 4.资料添加\n\n");
printf(" 5.资料删除\n\n");
printf(" 6.资料修改\n\n");
printf(" 7.资料整理\n\n");
printf(" 0.退出系统\n\n");
printf("请选择(0-7):");
scanf("%d",&choice);
switch(choice)
{case 1: input_message();break;
case 2: output_message();break;
case 3: inquire_message();break;
case 4: insert_message();break;
case 5: del_message();break;
case 6: revise_message();break;
case 7: sort_message();break;
case 0: break;
}
}while(choice!=0);
save_message(sum);
printf("\n -以上资料已保存!-(文件名:messagenotes.txt)\n");
}


/*保存信息*/
save_message(int sum)
{FILE *fp;
int i;
if((fp=fopen("messagenotes.txt","wb"))==NULL)
{printf("读文件错误!\n");
return;
}
for(i=0;i<sum;i++)
if(fwrite(&message[i],sizeof(struct message_type),1,fp)!=1)
printf("写文件错误!\n");
fclose(fp);
}


/*创建模块*/
input_message()
{int i=0,s=MAX;
clrsrc();
printf("n\n 录入通讯录\n",s);
printf("\n -------------------------------\n");
do
{printf("\n 第%d号录入",i+1);
printf("\n 编号:");
scanf("%d",&message[i].num);
if(message[i].num==0) break;
printf("\n 姓名:");
scanf("%s",message[i].name);
printf("\n 年龄:");
scanf("%d",&message[i].age);
printf("\n 电话:");
scanf("%s",&message[i].mobile[15]);
printf("\n 地址:");
scanf("%s",message[i].address);
i++;
}while(i<MAX);
printf("\n --第%d号录入完毕 --\n",i);
sum=i;
printf("\n 按任意键返回住菜单!");
}


/*读取信息*/
int read_message()
{ FILE *fp;
int i=0;
if((fp=fopen("messagenotes.txt","rb"))==NULL)
{ printf("\n\n*****暂时没有任何保存信息,按任意键进入主菜单选择进行信息录入!*****\n");
return;
}
while(feof(fp)!=1)
{ fread(&message[i],sizeof(struct message_type),1,fp);
if(message[i].num==0) break;
else i++;
}
fclose(fp);
return(i);
}


/*输出模块*/
output_message()
{int i=0,j=0,count,page=1;
clrscr();
printf("\n\n --通讯录资料-- 第%d页\n\n",page);
PRINT2;
PRINT1;
do
{if(message[i].num!=0)
{j++;
if(j%PAGE!=0)
{PRINT3;
PRINT1;
}
else
{PRINT3;
PRINT1;
if(message[i+1].num!=0)
{print("按任意键继续!");
bioskey(0);
clrscr();
printf("\n\n --通讯录资料-- 第%d页\n\n",++page);
PRINT2;
PRINT1;
}
}
}
i++;
}while(message[i].num!=0);
printf("按任意键返回主菜单!");
bioskey(0);
}


/*添加模块*/
insert_message()
{int i=sum,j,flag=0;
char choice;
clrscr();
printf("\n\n 添加一条资料\n");
printf(" ---------------------------\n");
do
{message[i].num=++sum;
printf("\n 新资料编号:%d",message[i].num);
printf("\n 姓名:");
scanf("%s",message[i].name);
printf("\n 年龄:");
scanf("%d",&message[i].age);
printf("\n 电话:");
scanf("%s",&message[i].mobile[15]);
printf("\n 地址:");
scanf("%s",message[i].address);
printf("\n 要继续吗?(Y/N)");
choice=getch();
if (choice=='y'||choice=='Y')
{printf("\n 继续!\n");
i++;
flag=1;
}
else flag=0;
}while(flag==1);
printf("\n 按任意键返回主菜单!");
bioskey(0);
}


/*删除模块*/
del_message()
{int i=sum,j,flag=0;
char choice;
clrscr();
printf("\n\n 删除一条资料\n");
printf(" ---------------------------\n");
do
{message[i].num=++sum;
printf("\n 删除资料编号:%d",message[i].num);
printf("\n 姓名:");
scanf("%s",message[i].name);
printf("\n 年龄:");
scanf("%d",&message[i].age);
printf("\n 电话:");
scanf("%s",&message[i].mobile[15]);
printf("\n 地址:");
scanf("%s",message[i].address);
printf("\n 要继续吗?(Y/N)");
choice=getch();
if (choice=='y'||choice=='Y')
{printf("\n 继续!\n");
i++;
flag=1;
}
else flag=0;
}while(flag==1);
printf("\n 按任意键返回主菜单!");
bioskey(0);
}


/*修改模块*/
revise_message()
{int i=0,choice,revise_num,flag;
do
{clrscr();
printf("\n 输入要修改的资料编号:");
scanf("%d",&revise_num);
for(i=0;i<sum;i++)
if(message[i].num==revise_num)
{printf("\n --资料信息--\n");
PRINT1;
PRINT2;
PRINT3;
printf("\n 您要修改哪一项?\n");
printf("\n 1.姓名\n");
printf("\n 2.年龄\n");
printf("\n 3.电话\n");
printf("\n 4.地址\n");
printf("\n 请选择(1-4):");
scanf("%d",&choice);
switch(choice)
{case 1: printf("\n 请输入修改后的姓名:");
scanf("%s",&message[i].name);break;
case 2: printf("\n 请输入修改后的年龄:");
scanf("%d",&message[i].age);break;
case 3: printf("\n 请输入修改后的手机:");
scanf("%s",&message[i].mobile[15]);break;
case 4: printf("\n 请输入修改后的地址:");
scanf("%s",&message[i].address);break;
}
PRINT1;
PRINT2;
PRINT3;
break;
}
if (i==sum)
{printf("\n 无该资料!");
bioskey(0);
}
printf("\n\n 继续修改吗?(Y/N)");
choice=getch();
if (choice=='Y'||choice=='y')
{flag=1;
printf("\n 继续!\n");
}
else flag=0;
}while(flag==1);
printf("\n 按任意键返回主菜单!");
bioskey(0);
}


/*按姓名查询*/
inquire_name()
{int i,choice,j=0,
char inquire_name;
clrscr();
printf("\n 请输入要查询的姓名:");
scanf("%s",inquire_name);
for(i=0;i<sum;i++)
if(strcmp(message[i].name,inquire_name)==0&&message[i].num!=0)
{printf("\n --资料--\n");
PRINT1;
PRINT2;
PRINT3;
}else j++;
if(j==sum) printf("\n 查询信息不存在!");
bioskey(0);
}

/*按年龄查询*/
inquire_age()
{int i,choice,j=0;
char inquire_age;
clrscr();
printf("\n 请输入要查询的年龄:");
scanf("%s",inquire_name);
for(i=0;i<sum;i++)
if(strcmp(message[i].name,inquire_name)==0&&message[i].num!=0)
{printf("\n --资料--\n");
PRINT1;
PRINT2;
PRINT3;
}else j++;
if(j==sum) printf("\n 查询信息不存在!");
bioskey(0);
}


/*查询模块*/
inquire_message()
(int choice; )
do
{clrscr();
printf("\n\n\n **********查询资料**********\n\n\n");
printf(" 1.按姓名查询\n\n");
printf(" 2.按年龄查询\n\n");
scanf("%d",&choice);
switch(choice)
{case 1: inquire_name;break;
case 2: inquire_age;break;
case 0: break;
}
}while(choice!=0);
}


/*排序模块*/
sort_num()
{struct message_type *p,*q[MAX];
int i,j,k;
clrscr();
printf("\n 按编号排序\n");
printf("---------------------------------------------\n");
printf("\n 排名 编号 姓名 年龄 手机 地址\n");
p=message;
for(i=0;i<sum;i++)
{k=i;
for(j=i+1;j<sum;j++)
if(q[k]->num<q[j]->num)
k=j;
if(k!=i)
{p=q[i];q[i]=q[k];q[k]=p;}
}
for(i=0;i<sum;i++)
printf("\n%d %d %s %d %s %s\n",
i+1,q[i]->num,q[i]->name,q[i]->age,q[i]->mobile[15],q[i]->address);
bioskey(0);
}

[此贴子已经被作者于2007-9-13 16:01:42编辑过]

搜索更多相关的解决方案: 通讯录  系统  define  printf  

----------------解决方案--------------------------------------------------------

你们要能理解老师的苦心。。。


----------------解决方案--------------------------------------------------------
你们也要理解coachard的苦心。。。
----------------解决方案--------------------------------------------------------
你们要理解楼上写文章的苦心~~~~~~~



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
帮忙看下啊。。。
----------------解决方案--------------------------------------------------------
又是通讯录,网上一搜源代码一把,论坛一搜...我不想说了,你找找别人的好好研究把,不是我不想帮你,只是一大堆源程序,看起来头很大的,要不你先告诉我编译器都报了哪些错!
----------------解决方案--------------------------------------------------------






----------------解决方案--------------------------------------------------------
LZ 做好了,给下载吗?我要用用。

----------------解决方案--------------------------------------------------------

只查看到main()中的case 3语句,对于代码中的每处修改,都已作注释。
因为代码中存在着较多的误点,请jojo先加以修改,并请努力。

#include <stdio.h>
#include <string.h>
/* 程序多次调用biodkey(),应包含头文件bios.h */
#include <bios.h>
/* 程序多次调用clrscr(),应包含头文件conio.h */
#include <conio.h>

#define MAX 100
#define PAGE 2
#define PRINT1 printf("--------------------------------------\n")
#define PRINT2 printf("NUM---NAME---AGE---MOBILE---ADDRESS\n")
#define PRINT3 printf("%d,%s,%d,%s,%s,\n",message[i].num,message[i].name,message[i].age,message[i].mobile[15],message[i].address);


int sum;


struct message_type
{
int num;
char name[15]; /* name应是数组 */
int age;
char mobile[15];
char address[30]; /* address应是数组 */
}message[MAX];


main()
{
int choice;
sum = read_message();
bioskey(0);

do
{
clrscr();
printf("\n\n\n ********通讯录管理系统********\n\n" );
printf(" 1.创建资料\n\n");
printf(" 2.输出资料\n\n");
printf(" 3.资料查询\n\n");
printf(" 4.资料添加\n\n");
printf(" 5.资料删除\n\n");
printf(" 6.资料修改\n\n");
printf(" 7.资料整理\n\n");
printf(" 0.退出系统\n\n");
printf("请选择(0-7):");
scanf("%d",&choice);

switch(choice)
{
case 1: input_message();break;
case 2: output_message();break;
case 3: inquire_message();break;
case 4: insert_message();break;
case 5: del_message();break;
case 6: revise_message();break;
case 7: sort_message();break;
case 0: break;
}
}while(choice!=0);
save_message(sum);
printf("\n -以上资料已保存!-(文件名:messagenotes.txt)\n");
}


/*保存信息*/
save_message(int sum)
{FILE *fp;
int i;
if((fp=fopen("messagenotes.txt","wb"))==NULL)
{printf("读文件错误!\n");
return;
}
for(i=0;i<sum;i++)
if(fwrite(&message[i],sizeof(struct message_type),1,fp)!=1)
printf("写文件错误!\n");
fclose(fp);
}

/* Function: input_message() */
input_message()
{
int i=0; /* 变量s无用,已删除 */
clrsrc();
printf("\n\n 录入通讯录\n"); /* 笔误 */
printf("\n -------------------------------\n");

do
{
printf("\n 第%d号录入",i+1);
printf("\n 编号:");
scanf("%d",&message[i].num);
if(message[i].num == 0)
break;
printf("\n 姓名:");
scanf("%s",message[i].name);
printf("\n 年龄:");
scanf("%d",&message[i].age);
printf("\n 电话:");
scanf("%s",message[i].mobile); /* message的mobile是数组,不用取址 */
printf("\n 地址:");
scanf("%s",message[i].address);
i++;
}while(i<MAX);

printf("\n --第%d号录入完毕 --\n",i);
sum = i;
printf("\n 按任意键返回住菜单!"); /* 本语句无效,程序已自动返回菜单 */
}

/* Function: read_message() */
int read_message()
{
FILE *fp;
int i = 0;
if((fp=fopen("messagenotes.txt","rb")) == NULL)
{
printf("\n\n*****暂时没有任何保存信息,按任意键进入主菜单选择进行信息录入!*****\n");
return;
}
while(!feof(fp)) /* feof()遇文件结束标志时返回非0值,不能依赖于1 */
{
fread(&message[i],sizeof(struct message_type),1,fp);
if(message[i].num == 0)
break;
else
i++;
}
fclose(fp);
return(i);
}


/* Function: output_message() */
output_message()
{
int i=0,j=0,count,page=1;
clrscr();
printf("\n\n --通讯录资料-- 第%d页\n\n",page);
PRINT2;
PRINT1;

do
{
if(message[i].num != 0)
{
j++;
if(j%PAGE != 0) /* 本if句恒假 */
{
PRINT3;
PRINT1;
}
else
{
PRINT3;
PRINT1;
if(message[i+1].num!=0)
{
print("按任意键继续!");
bioskey(0);
clrscr();
printf("\n\n --通讯录资料-- 第%d页\n\n",++page);
PRINT2;
PRINT1;
}
}
}
i++;
}while(message[i].num != 0);

printf("按任意键返回主菜单!");
bioskey(0);
}


/* Function: insert_message() */
insert_message()
{
int i=sum,j,flag=0;
char choice;
clrscr();
printf("\n\n 添加一条资料\n");
printf(" ---------------------------\n");
do
{
message[i].num = ++sum;
printf("\n 新资料编号:%d",message[i].num);
printf("\n 姓名:");
scanf("%s",message[i].name);
printf("\n 年龄:");
scanf("%d",&message[i].age);
printf("\n 电话:");
scanf("%s",&message[i].mobile[15]);
printf("\n 地址:");
scanf("%s",message[i].address);
printf("\n 要继续吗?(Y/N)");
choice=getch();
if (choice=='y'||choice=='Y')
{printf("\n 继续!\n");
i++;
flag=1;
}
else flag=0;
}while(flag==1);
printf("\n 按任意键返回主菜单!");
bioskey(0);
}


/*删除模块*/
del_message()
{int i=sum,j,flag=0;
char choice;
clrscr();
printf("\n\n 删除一条资料\n");
printf(" ---------------------------\n");
do
{message[i].num=++sum;
printf("\n 删除资料编号:%d",message[i].num);
printf("\n 姓名:");
scanf("%s",message[i].name);
printf("\n 年龄:");
scanf("%d",&message[i].age);
printf("\n 电话:");
scanf("%s",&message[i].mobile[15]);
printf("\n 地址:");
scanf("%s",message[i].address);
printf("\n 要继续吗?(Y/N)");
choice=getch();
if (choice=='y'||choice=='Y')
{printf("\n 继续!\n");
i++;
flag=1;
}
else flag=0;
}while(flag==1);
printf("\n 按任意键返回主菜单!");
bioskey(0);
}


/*修改模块*/
revise_message()
{int i=0,choice,revise_num,flag;
do
{clrscr();
printf("\n 输入要修改的资料编号:");
scanf("%d",&revise_num);
for(i=0;i<sum;i++)
if(message[i].num==revise_num)
{printf("\n --资料信息--\n");
PRINT1;
PRINT2;
PRINT3;
printf("\n 您要修改哪一项?\n");
printf("\n 1.姓名\n");
printf("\n 2.年龄\n");
printf("\n 3.电话\n");
printf("\n 4.地址\n");
printf("\n 请选择(1-4):");
scanf("%d",&choice);
switch(choice)
{case 1: printf("\n 请输入修改后的姓名:");
scanf("%s",&message[i].name);break;
case 2: printf("\n 请输入修改后的年龄:");
scanf("%d",&message[i].age);break;
case 3: printf("\n 请输入修改后的手机:");
scanf("%s",&message[i].mobile[15]);break;
case 4: printf("\n 请输入修改后的地址:");
scanf("%s",&message[i].address);break;
}
PRINT1;
PRINT2;
PRINT3;
break;
}
if (i==sum)
{printf("\n 无该资料!");
bioskey(0);
}
printf("\n\n 继续修改吗?(Y/N)");
choice=getch();
if (choice=='Y'||choice=='y')
{flag=1;
printf("\n 继续!\n");
}
else flag=0;
}while(flag==1);
printf("\n 按任意键返回主菜单!");
bioskey(0);
}


/* Function: inquire_name() */
inquire_name()
{
int i,choice,j=0; /* 笔误 */
char inquire_name[15]; /* 变量inquire_name应为数组 */
clrscr();
printf("\n 请输入要查询的姓名:");
scanf("%s",inquire_name);

for(i=0; i<sum; i++)
{ /* 以下语句,在0<i<sum的情况下,message[i].num恒不等于0 */
if(strcmp(message[i].name,inquire_name) == 0)
{
printf("\n --资料--\n");
PRINT1;
PRINT2;
PRINT3;
break; /* 增加 */
}
else
j++;
}
if(j == sum)
printf("\n 查询信息不存在!");
bioskey(0);
}

/* Function: inquire_age() */
inquire_age() /* 对本函数作更改,参与原函数比较 */
{
int i,choice,j=0;
int inquire_age;
clrscr();
printf("\n 请输入要查询的年龄:");
scanf("%d",&inquire_age);
for(i=0; i<sum; i++)
if(message[i].age == inquire_age)
{
printf("\n --资料--\n");
PRINT1;
PRINT2;
PRINT3;
break;
}
else
j++;
if(j == sum)
printf("\n 查询信息不存在!");
bioskey(0);
}


/* Function: inquire_message() */
inquire_message()
{
int choice; /* 原语句笔误,已改 */

do
{
clrscr();
printf("\n\n\n **********查询资料**********\n\n\n");
printf(" 1.按姓名查询\n\n");
printf(" 2.按年龄查询\n\n");
scanf("%d",&choice);
switch(choice)
{
case 1: inquire_name();break; /* 为函数调用 */
case 2: inquire_age();break; /* 同上 */
case 0: break;
}
}while(choice != 0);
}


/*排序模块*/
sort_num()
{struct message_type *p,*q[MAX];
int i,j,k;
clrscr();
printf("\n 按编号排序\n");
printf("---------------------------------------------\n");
printf("\n 排名 编号 姓名 年龄 手机 地址\n");
p=message;
for(i=0;i<sum;i++)
{k=i;
for(j=i+1;j<sum;j++)
if(q[k]->num<q[j]->num)
k=j;
if(k!=i)
{p=q[i];q[i]=q[k];q[k]=p;}
}
for(i=0;i<sum;i++)
printf("\n%d %d %s %d %s %s\n",
i+1,q[i]->num,q[i]->name,q[i]->age,q[i]->mobile[15],q[i]->address);
bioskey(0);
}


----------------解决方案--------------------------------------------------------
  相关解决方案