/*@file telbook.c
*电话号码管理
*C+*.dat file
**.dat filename="c:/xxxxx.dat";
*complied with vc++
*chinayaosir
*/
/*0.1include head file*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
/*0.2 data struct*/
struct telephone
{char client_name[20];
char client_address[30];
char telephonenmber[15];
}message;
/*0.3操作函数声明*/
//1.1用户使用界面
void user_interface();
//1.2添加电话号码
void insert_data();
//1.3修改电话号码
void modify_data();
//1.4删除电话号码
void delete_data();
//1.5保存电话号码
void saveto_data();
//1.6用户查询函数
void search_method();
//1.7打印资料清单
void print_all_data();
//其它方法...
//排序电话号码函数
void sort_data();
//按用户名称查询
void search_name();
//按电话号码查询
void search_number();
//2.全局文件名称
char* filename="telbook.dat";
//3.main()主函数调用
void main()
{
user_interface();
}
//1.1用户使用界面
void user_interface()
{
int choice=0;
while(choice!=6)
{
system("cls");
printf("/n 电话本管理 /n");
printf("/n================================");
printf("/n -1- 添加资料");
printf("/n -2- 修改资料");
printf("/n -3- 删除资料");
printf("/n -4- 资料查询");
printf("/n -5- 汇总资料");
printf("/n -6- 退出系统");
printf("/n================================");
printf("/n请选择:");
scanf(" %d",&choice);
getchar();
if(choice>7||choice<1)
{
printf("请选择1-6之间的数/n按回车继续");
getch();
continue;
}
switch(choice)
{
case 1:
insert_data();
break;
case 2:
modify_data();
break;
case 3:
delete_data();
break;
case 4:
search_method();
break;
case 5:
print_all_data();
break;
case 6:
break;
default:
break;
}
}
system("cls");
printf("/n谢谢你的使用,再见!/n");
}
//1.2添加电话号码
void insert_data()
{
char choice = 'y';
while(choice == 'Y' || choice == 'y')
{
system("cls");
printf("/n 添加电话号码 /n");
printf("/n================================/n");
printf("请按下面输入资料:/n");
printf("用户姓名:");
gets(message.client_name);
printf("用户电话:");
gets(message.telephonenmber);
printf("用户地址:");
gets(message.client_address);
printf("/n是否保存?[y/n]:");
scanf(" %c",&choice);
if(choice=='y'||choice=='Y') {saveto_data(); }
printf("/n继续添加?[y/n]:");
scanf(" %c", &choice);
getchar();
}
printf("任意键返回……/n");
getch();
}
//1.3修改电话号码
/*此程序有些bug*/
void modify_data()
{
FILE *fp;
char name[20];
char choice = 'y';
char found='y';
while(choice=='y'||choice=='Y')
{
fp=fopen(filename,"r+w");//打开文件进行读写操作
if (fp==NULL)
printf("/n打开文件错误!/n");
if(fp!=NULL)
{
system("cls");
printf("/n修改电话号码/n");
printf("/n================================/n");
printf("请输入修改的用户姓名:");
scanf("%s",name);
//将文件数据进行一一读取,如果找到则退出
while((fread(&message,sizeof(struct telephone),1,fp))==1)
{
if(strcmp(name,message.client_name)==0)
{ found='y'; break; }
}
if(found=='y')//如果找到,输出信息,并输入新信息和保存
{
printf("/n原用户信息/n");
printf("用户姓名:%s/n",message.client_name);
printf("用户电话:%s/n",message.telephonenmber);
printf("用户地址:%s/n",message.client_address);
printf("/n用户新信息");
printf("/n请输入用户姓名:");
scanf("%s",message.client_name);
printf("/n请输入用户电话:");
scanf("%s",message.telephonenmber);
printf("/n请输入用户地址:");
scanf("%s",message.client_address);
printf("/n/n要保存吗?[y/n]:");
scanf(" %c",&choice);
if(choice=='y'||choice=='Y')
{
fseek(fp,sizeof(struct telephone),1);
fwrite(&message,sizeof(struct telephone),1,fp);
}
}
else
{ printf("没有此用户信息!/n"); }
}
fclose(fp);
printf("继续修改吗?[y/n]");
scanf(" %c",&choice);
}
printf("按任意键返回……");
getchar();
}
//1.4删除电话号码
void delete_data()
{
FILE *fp;
int i=0,j;
struct telephone diff[500],same;
char name[20],found='n',choice='y';
while(choice=='y'||choice=='Y')
{
fp=fopen(filename,"rb");//打开文件进行读操作
if(fp!=NULL)
{
system("cls");
printf("/n 删除电话号码/n");
printf("/n================================/n");
printf("请输入用户姓名:");
scanf("%s",name);
//将文件数据进行一一读取,如果找到则退出
while((fread(&message,sizeof(struct telephone),1,fp))==1)
{
if(strcmp(name,message.client_name)==0)
{ same=message; found='y'; }
else
{ diff[i++]=message; }
}
}
else
{ printf("/n打开文件错误!/n"); }
fclose(fp);
if(found=='y')//如果找到,输出信息,并重新输入新信息和保存
{
printf("/n删除的用户信息/n");
printf("用户姓名:%s/n",same.client_name);
printf("用户电话:%s/n",same.telephonenmber);
printf("用户地址:%s/n",same.client_address);
printf("/n要删除吗?[y/n]:");
scanf(" %c",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen(filename,"wb");//打开文件进行写操作
if(fp!=0)
{
rewind(fp);
for(j=0;j<i;j++)
{ fwrite(&diff[j],sizeof(struct telephone),1,fp); }
}
else
{ printf("/n打开文件错误!/n"); }
}
}
else
{
printf("没有此用户的信息!");
}
fclose(fp);
printf("要继续删除吗?[y/n]");
scanf(" %c",&choice);
}
printf("按任意键返回……");
getchar();
}
//1.5保存电话号码
void saveto_data(){
FILE *fp;
fp=fopen(filename,"a+b");//追加方式打开文件进行操作
if (fp!=NULL)
//进行写操作
{fwrite(&message,sizeof(struct telephone),1,fp);}
else
{return;}
fclose(fp);
}
//1.6用户查询函数
void search_method(){
int choice=0;
while(choice!=3){
system("cls");
printf("/n 电话号码管理 /n");
printf("/n================================/n");
printf("/n -1- 用户姓名查询/n");
printf("/n -2- 电话号码查询/n");
printf("/n -3- 返回上级菜单/n");
printf("/n================================/n");
printf("/n请选择:");
scanf(" %d",&choice);
getchar();
if(choice>3||choice<1) {
printf("请选择1-2之间的数/n按回车继续");
getchar();
continue;
}
switch(choice)
{
case 1:
//按用户名称查询
search_name();
break;
case 2:
//按电话号码查询
search_number();
break;
default:
break;
}
}
}
//1.7打印资料清单
void print_all_data(){
FILE *fp;
int i;
sort_data();
fp=fopen(filename,"rb");//打开文件进行读操作
if (fp!=NULL){
system("cls");
printf("/n 打印资料清单 /n");
printf("/n================================/n");
for(i=0;(fread(&message,sizeof(struct telephone),1,fp))==1;i++){
printf("记录%d:/n",i+1);
printf("/t姓名:/t%s/n",message.client_name);
printf("/t电话:/t%s/n",message.telephonenmber);
printf("/t地址:/t%s/n",message.client_address);
printf("================================/n");
}
printf("/n共%d条记录/n",i);
}
else
{
printf("打开文件时出现错误/n");
}
fclose(fp);
printf("按任意键返回……");
getchar();
}
//排序记录数据
void sort_data(){
FILE *fp;
int i,j,k;
struct telephone temp[500],change;
fp=fopen(filename,"rb");//打开文件进行读操作
if (fp!=NULL){
system("cls");
for(i=0;(fread(&message,sizeof(struct telephone),1,fp))==1;i++)
{temp[i]=message;}
for(j=1;j<=i-1;j++){
for(k=0;k<i-j;k++){
if(strcmp(temp[k].client_name,temp[k+1].client_name)>0){
change=temp[k];
temp[k]=temp[k+1];
temp[k+1]=change;
}/*end if*/
}/*end for k*/
}/*end for j*/
}/*if fp!=NULL*/
else
{return;}
fclose(fp);
//进行写操作
fp=fopen(filename,"wb");//写方式打开文件进行操作
for(j=0;j<i;j++)
{fwrite(&temp[j],sizeof(struct telephone),1,fp);}
fclose(fp);
}
//按用户名查询
void search_name(){
FILE *fp;
char name[20];
char choice = 'y';
int i=0;
while(choice=='y'||choice=='Y'){
fp=fopen(filename,"rb");//打开文件进行读写操作
if(fp!=NULL){
system("cls");
printf("/n 按用户名查询 /n");
printf("/n================================/n");
printf("请输入用户姓名:");
scanf("%s",name);
//将文件数据进行一一读取,如果找到则退出
while((fread(&message,sizeof(struct telephone),1,fp))==1){
if(strcmp(name,message.client_name)==0) {
i++;
printf("/n用户姓名:%s/n",message.client_name);
printf("用户电话:%s/n",message.telephonenmber);
printf("用户地址:%s/n",message.client_address);
}
}
if(i==0){ printf("/n没有此用户信息!/n"); }
}
else
{
printf("/n打开文件错误!/n");}
fclose(fp);
printf("/n要继续按本方式查询吗?[y/n]");
scanf(" %c",&choice);
}
printf("按任意键返回……");
getchar();
}
//按电话号码查询
void search_number() {
FILE *fp;
char number[15];
char choice = 'y';
int i=0;
while(choice=='y'||choice=='Y') {
fp=fopen(filename,"rb");//打开文件进行读写操作
if(fp!=NULL){
system("cls");
printf("/n 电话号码管理 /n");
printf("/n================================/n");
printf("请输入电话号码:");
scanf("%s",number);
//将文件数据进行一一读取,如果找到则退出
while((fread(&message,sizeof(struct telephone),1,fp))==1){
if(strcmp(number,message.telephonenmber)==0){
i++;
printf("/n用户姓名:%s/n",message.client_name);
printf("用户电话:%s/n",message.telephonenmber);
printf("用户地址:%s/n",message.client_address);
}
}
if(i==0) { printf("/n没有此用户信息!/n"); }
}
else
{ printf("/n打开文件错误!/n"); }
fclose(fp);
printf("/n要继续按本方式查询吗?[y/n]");
scanf(" %c",&choice);
}
printf("按任意键返回……");
getchar();
}