C语言编写一个通讯录管理系统的源代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*定义保存通迅录的信息*/
structfriends
{
charname[20]/*名字*/
charprovince[20]/*省份*/
charcity[20]/*所在城市*/
charnation[20]/*民族*/
charsex[2]/*性别M/F*/
intage/*年龄*/
}
扩展资料
1、在芦拿哪C++中应该使用inline内连函数替代宏调用,这样陪码既可达到宏调用的目的,又避免了宏调用的弊端敏橘。
2、在C语言两个函数的名称不能相同,否则会导致编译错误。在C++中,函数名相同而参数不同的两个函数被解释为重载。
3、在大型程序中,使函数名易于管理和使用,不必绞尽脑汁地去处理函数名。
/*【用C语言编写具有数据插入、修改、删除、显示和查询功能的电话薄管理程序】1、数据包括:人名、工作单位、电话号码和E-mail地址。
2、可对记录中的姓名和电话号码进行修改。
3、可增加或删除记录。
4、可显示所有保存的记录。
5、可按人名或电话号码进行查询。
另:采用结构体数组和文件系统实现。结构体包括人名岁卜、工作单位、电话号码和E-mail
绝对原创,2010年7月12日晚刚写完测试通过的,纯C语言! */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define szSTR 64
#define fileDB "c:\\contact.txt"
struct CONTACT {
char name[szSTR]/*姓名*/
char unit[szSTR]/*工作单位*/
char tele[szSTR]/*电话*/
char mail[szSTR]/*mail*/
}
typedef struct CONTACT CON
#define BNAME 1
#define BUNIT 2
#define BTELE 4
#define BMAIL 8
#define BFULL 0xFF
int OPER[5] = {BFULL, BNAME, BUNIT, BTELE, BMAIL}
void input(CON * s, int mask)
{
if(mask &BNAME) { printf("请输入学生姓名:")scanf("%s", s->name)}
if(mask &BUNIT) { printf("请输入工作单位:")scanf("%s", s->unit)}
if(mask &BTELE) { printf("请输入联系电话:")scanf("%s", s->tele)}
if(mask &BMAIL) { printf("请输入电子邮件:")scanf("%s", s->源岁mail)}
}/*end input*/
void show (int id, CON * s)
{
if(!s) return
if(id)
printf("%d\t%s\t%s\t%s\t%s\n",
id, s->name , s->unit , s->tele , s->mail )
else
printf("【姓名】%s【工作单位】%s【电话】%s【电邮】%s\n",
s->name , s->unit , s->tele , s->mail )
/*end if*/
}/*end show*/乎裂穗
void regist(void)
{
CON sFILE * f = 0
input(&s, BFULL)
f = fopen(fileDB, "ab")
fwrite(&s,sizeof(s),1,f)
fclose(f)
printf("资料已保存!\n")
}/*end regist*/
int browse(char * key, fpos_t * p, CON * s)
{
FILE * f =0int i = 0, r = 0CON t
char * a = 0, * b = 0fpos_t q
if(!s) return 0
f = fopen(fileDB, "rb")
if(!f) {
printf("数据库暂无记录\n")
return 0
}/*end if*/
printf("编号\t姓名\t单位\t电话\t电邮\n")
printf("------------------------------------------------\n")
while(!feof(f)) {
fgetpos(f, &q)
r = fread(&t, sizeof(t), 1, f)
if(r<1)break
if(t.name[0]==0) continue
if(key) {
a = strstr(t.name , key)
b = strstr(t.tele , key)
if(a == 0 &&b == 0) continue
}/*end if*/
if(p) *p = q
if(s) memcpy(s, &t, sizeof(t))
i++
show(i, &t)
}/*end while*/
fclose(f)
printf("------------------------------------------------\n")
return i
}/*end browse*/
fpos_t query(CON * s)
{
char key[szSTR]=""fpos_t p = 0int r = 0
printf("请输入姓名或者电话号码:")
scanf("%s", key)
r = browse(key, &p, s)
return r?p:-1
}/*end query*/
void clear(void)
{
FILE * f = 0CON s
fpos_t p = query(&s)
if(p<0) return
f = fopen(fileDB, "rb+")
fsetpos(f, &p)
memset(&s, 0, sizeof(s))
fwrite(&s, sizeof(s),1, f)
fclose(f)
printf("记录已删除!\n")
}/*end clear*/
void modify(void)
{
FILE * f = 0CON sint cmd = 0
fpos_t p = query(&s)
if(p<0) return
f = fopen(fileDB, "rb+")
fsetpos(f, &p)
for() {
show(0, &s)
printf("请选择:1-姓名;2-工作单位;3-电话;4-电邮;5-保存并退出;6-放弃修改并退出\n")
scanf("%d", &cmd)
switch(cmd) {
case 1:
case 2:
case 3:
case 4:
input(&s, OPER[cmd])
break
case 5:
fsetpos(f, &p)
fwrite(&s, sizeof(s), 1, f)
case 6:
fclose(f)
return
default:
printf("错误的 *** 作,请重新输入。\n")
}/*end case*/
}/*mext*/
}/*end clear*/
int main(void)
{
int cmd = 0CON s
for() {
printf("欢迎使用通信簿!请选择:1-添加;2-查询;3-删除;4-修改;5-全部输出;0-退出\n")
scanf("%d", &cmd)
switch(cmd) {
case 0: return 0
case 1: regist()break
case 2: query(&s)break
case 3: clear()break
case 4: modify()break
case 5: browse(0, 0, &s)break
}//end case
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)