<stdio.h>
#include
<string.h>
#include
<stdlib.h>
typedef
struct
student
*ST
struct
student
{
char
stN[20]
char
stVal[128]
char
stNo[10]
char
stTel[12]
ST
next
}
ST
head
=
NULL
int
ShowNode()
{
char
no[20]
=
{0}
ST
t
printf("输入姓名:")
scanf("%s",
no)
for
(t
=
head
t
t
=
t->next)
{
if
(!memcmp(t->stN,
no,
strlen(no)))
{
printf("姓名:%s,
地址:%s
邮编:%s
电话:%s\n",
t->stN,
t->stVal,
t->stNo,
t->stTel)
return
0
}
}
printf("无此人信息\n")
return
0
}
int
ChangeNode()
{
char
no[20]
ST
t
printf("输入姓名:")
scanf("%s",
no)
for
(t
=
head
t
t
=
t->next)
{
if
(!memcmp(t->stN,
no,
strlen(no)))
{
printf("输入新的记录:\n")
printf("地址:")
scanf("%s",
t->stVal)
printf("邮编:")
scanf("%s",
t->stNo)
printf("英语成绩:")
scanf("%s",
t->stTel)
return
0
}
}
printf("无此人信息\n")
return
0
}
int
InsertNode()
{
ST
t
t
=
(ST)malloc(sizeof
*t)
printf("输入姓名:")
scanf("%s",
t->stN)
printf("输入地址:")
scanf("%s",
t->stVal)
printf("输入邮编:")
scanf("%s",
t->stNo)
printf("输入电话:")
scanf("%s",
t->stTel)
t->next
=
head
head
=
t
return
0
}
int
DelNode()
{
ST
x,
y
char
no[20]
=
{0}
printf("输入姓名:")
scanf("%s",
no)
for
(x
=
y
=
head
x
y
=
x,
x
=
x->next)
{
if
(!memcmp(x->stN,
no,
strlen(no)))
{
if
(x
==y)
{
x
=
head
=
head->next
y->next
=
NULL
free(y)
return
0
}
else
{
y->next
=
x->next
x->next
=
NULL
free(x)
return
0
}
}
}
printf("无此学生\n")
return
0
}
int
main(void)
{
int
i
while(1)
{
printf("查询记录:1\n"
"更改记录:2\n"
"插入记录:3\n"
"删除记录:4\n"
"退出:5\n")
scanf("%d",
&i)
if
(1==i)
{
ShowNode()
}
else
if(2==i)
{
ChangeNode()
}
else
if(3==i)
{
InsertNode()
}
else
if(4==i)
{
DelNode()
}
else
if(5==i)
{
break
}
else
{
printf("输入错误!请重新输入!\n")
continue
}
}
return
0
}
不管你接受不接受劝告,我还是要说,要源代码是在是不好。这个很简单,用vc搭些界面,新建1个数据库。
然后,只要在代码里做几个sql与就可以了。
用insert 建立通讯记录。
用unpdate修改记录。
用delete删除记录。
界面上做些文本框输入调节,把文本框内容粘帖到sql的条件就可以了。
简易做对话框形式就可以了,多文档界面稍微复杂。
/*【用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条)