用C语言编写一个通讯录管理系统。
本系统应完成一下几方面的功能:1)输入信息——enter();2)显示信息———display();3)查找以姓名作为关键字———search();4)删除信息———de...
本系统应完成一下几方面的功能:
1) 输入信息——enter();
2) 显示信息———display( );
3) 查找以姓名作为关键字 ———search( );
4) 删除信息———delete( );
5) 存盘———save ( );
6) 装入———load( ) ;
【基本要求】
1) 每条信息至少包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力 展开
1) 输入信息——enter();
2) 显示信息———display( );
3) 查找以姓名作为关键字 ———search( );
4) 删除信息———delete( );
5) 存盘———save ( );
6) 装入———load( ) ;
【基本要求】
1) 每条信息至少包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力 展开
2014-01-12
展开全部
一个通信录管理程序有以下功能:
. 插入新的通信记录;
. 查找某人的通信记录;
. 删除某人的通信记录;
. 浏览通信录;
. 结束程序运行。
设每条通信录包含以下内容:
.姓名
.地址
.邮政编码
.电话号码
并设通信录全部以字符行形式存于文件中,每四个字符行构成一个通信录记录。
程序启动后,自动从指定的文件中读取通信录信息。程序运行结束后,又自动将内存中修改过的通信录
信息保护到文件中。为了查找,插入,删除等操作的方便,程序内部以双向链表形式组织通信录信息。设启
动程序的命令行可带通信录文件参数。如启动时未给出文件名参数,则程序首先要求用户键入通信录文件
名。程序运行时,反复显示请求输入操作命令的提示信息:
请输入命令: [i, f, d, s, q]
即要求用户打入一条命令,它可以是 i(插入)、f(寻找)、d(删除)、s(显示)以及q(结束程序运行)。如果打
入命令不是其中之一, 将详细显示命令符及其意义的说明:
命令表:
i : 插入一条新的通信记录.
f : 按输入名查找通信录.
d : 按输入名删除一条通信录.
s : 浏览通信录.
q : 退出.
然后重新请求打入操作命令的提示信息。程序将全部通信录组织成一个双向勾链的链表。接受显示通信录表
的命令后,首先显示的是第一条通信录,由用户键入Up键或Down键分别实现向上或向下选择,显示下一条通信录。键入Escape键结束显示命令。上述三键在显示一条通信录之后,在下面给出提示。按其他键不予理睬.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXL 120
typedef struct saddr {
char *name;
char *address;
char *zip;
char *phone;
struct saddr *next, *pre;
} ADDR;
char buffer[MAXL], fname[40];
FILE *fp;
int modified = 0;
ADDR *load();
void insert(), make(), find(), del(), display(), show(),
save(), freeall(), usage();
int getstr(FILE*, char **), getbuffer(FILE *);
int main(int argc, char **argv)
{
ADDR *head;
char c;
if (argc == 1) {
printf("请输入通信录文件名. ");
scanf("%s%*c", fname);
}
else{
strcpy(fname, *++argv);
}
head = load(fname);
while (1) {
printf("\n请输入命令: [i, f, d, s, q]\n");
while (getbuffer(stdin) == 0);
if ((c = buffer[0]) == 'q') {
if (modified) {
printf("修改后的通信录未保存,要保存吗?(y/n) ");
while (!(((c = getchar()) >= 'a' && c <= 'z') �0�7�0�7 (c >= 'A' && c <= 'Z')))continue;
if (c == 'y' �0�7�0�7 c == 'Y')
save(head, fname);
}
freeall(head);
break;
}
. 插入新的通信记录;
. 查找某人的通信记录;
. 删除某人的通信记录;
. 浏览通信录;
. 结束程序运行。
设每条通信录包含以下内容:
.姓名
.地址
.邮政编码
.电话号码
并设通信录全部以字符行形式存于文件中,每四个字符行构成一个通信录记录。
程序启动后,自动从指定的文件中读取通信录信息。程序运行结束后,又自动将内存中修改过的通信录
信息保护到文件中。为了查找,插入,删除等操作的方便,程序内部以双向链表形式组织通信录信息。设启
动程序的命令行可带通信录文件参数。如启动时未给出文件名参数,则程序首先要求用户键入通信录文件
名。程序运行时,反复显示请求输入操作命令的提示信息:
请输入命令: [i, f, d, s, q]
即要求用户打入一条命令,它可以是 i(插入)、f(寻找)、d(删除)、s(显示)以及q(结束程序运行)。如果打
入命令不是其中之一, 将详细显示命令符及其意义的说明:
命令表:
i : 插入一条新的通信记录.
f : 按输入名查找通信录.
d : 按输入名删除一条通信录.
s : 浏览通信录.
q : 退出.
然后重新请求打入操作命令的提示信息。程序将全部通信录组织成一个双向勾链的链表。接受显示通信录表
的命令后,首先显示的是第一条通信录,由用户键入Up键或Down键分别实现向上或向下选择,显示下一条通信录。键入Escape键结束显示命令。上述三键在显示一条通信录之后,在下面给出提示。按其他键不予理睬.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXL 120
typedef struct saddr {
char *name;
char *address;
char *zip;
char *phone;
struct saddr *next, *pre;
} ADDR;
char buffer[MAXL], fname[40];
FILE *fp;
int modified = 0;
ADDR *load();
void insert(), make(), find(), del(), display(), show(),
save(), freeall(), usage();
int getstr(FILE*, char **), getbuffer(FILE *);
int main(int argc, char **argv)
{
ADDR *head;
char c;
if (argc == 1) {
printf("请输入通信录文件名. ");
scanf("%s%*c", fname);
}
else{
strcpy(fname, *++argv);
}
head = load(fname);
while (1) {
printf("\n请输入命令: [i, f, d, s, q]\n");
while (getbuffer(stdin) == 0);
if ((c = buffer[0]) == 'q') {
if (modified) {
printf("修改后的通信录未保存,要保存吗?(y/n) ");
while (!(((c = getchar()) >= 'a' && c <= 'z') �0�7�0�7 (c >= 'A' && c <= 'Z')))continue;
if (c == 'y' �0�7�0�7 c == 'Y')
save(head, fname);
}
freeall(head);
break;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询