#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
#include<algorithm>
#include<malloc.h>//动态存储分配函数
using namespace std;
#define BUFLEN 80 // 缓冲区最大字符数
#define LEN 30 // 学号和姓名最大字符数,实际请更改
#define N 200 // 最大学生人数,实际请更改
enum Info {CODE, NAME, AGE, SEX, JOB, ADD, GONGDI, TEL, MAIL, QQ };
struct record
{
char code[LEN+1];
char name[LEN+1];
int age;
char sex[3];
char job[LEN+1];
char add[LEN+1];
char gongdi[LEN+1];
char tel[LEN+1];
char mail[LEN+1];
char qq[LEN+1];
}stu[N], stutmp[N];
bool cmp1(record a, record b) //sort比较函数,学号从小到大
{
if (strcmp(a.code, b.code) < 0)
{
return true;
}
else
{
return false;
}
}
bool cmp2(record a, record b)
{//名字拼音从小到大
if (strcmp(a.name, b.name) < 0)
{
return true;
}
else if (strcmp(a.name, b.name) == 0)
{
cmp1(a, b);//名字相同的再按学号排序
}
else
{
return false;
}
}
int k=1,n,m, number = 1;
int cnt=0;
char Number[8];
void readfile();// 函数声明 */
void seek();
void modify();
void insert();
void del();
void display();
void save();
void menu();
void process_no();
void cancel();
char *compare_info(int i, int info);
void seek_really(int info, char s1[]);
void seek_foggy(char s1[]);
int main()
{
system("color 70");
system("cls");
readfile();
printf("你的注册码是%s\n", Number);//输出Number,注册码
printf("当前您的名片有%d张\n",cnt);
if (cnt==0)
{
printf("这是你第一次进入系统,请输入你的注册码(你的学号……)!\n");
scanf("%s", Number);
}
while (k)
menu();
system("pause");
return 0;
}
/*************************建立函数**********************/
void readfile()
{
char buf[BUFLEN],*p="Cards.dat";
FILE *fp;
int i=0;
if ((fp=fopen("Cards.dat","r"))==NULL) // 把此程序和文件student.dat放在同一目录下
{
printf("文件读取失败,可能并未建立文件!\n");
return;
}
while (fscanf(fp,"%s %s %s%d%s %s %s %s %s %s %s", Number,stu[i].code,stu[i].name,&stu[i].age,
stu[i].sex,stu[i].job,stu[i].add,stu[i].gongdi,stu[i].tel,stu[i].mail,stu[i].qq) != EOF)
{
i++;
cnt++;
}
fclose(fp);
n=i;
printf("录入完毕!\n");
}
/*************************查询函数**********************/
void seek_foggy(int info, char s1[]) {//模糊查询
int flag = 0;
number = 1;
int len = strlen(s1);
bool hash[110];
memset(hash, false, sizeof(hash));
for (int i=0;i<n;i++)
{
char *str = compare_info(i, info);//返回待查询的信息类型的字符串值
for (int j = 0; j < 11; j++) {
if (strncmp(&str[j], s1, len)==0 && !hash[i])
{
flag=1;
hash[i] = true;
stutmp[number] = stu[i];
number++;
}
}
}
if (flag != 1)
printf("该信息不存在!\n");
}
void seek_age(char s1[]) {
int len = strlen(s1);
int flag = 0;
int i;
number = 1;
for (i = 0; i < len; i++) {
if (s1[i] <= '0' && s1[i] >= '9') {
puts("输入年龄信息有误~");
return ;
}
}
int tmp = 1;
int stuage = 0;
for (i = len - 1; i >= 0; i--) {
stuage += (s1[i] - '0') * tmp;
tmp *= 10;
}
for (i=0;i<n;i++)
{
if (stu[i].age == stuage)
{
flag=1;
stutmp[number] = stu[i];
number++;
}
}
if (flag != 1)
printf("该信息不存在!\n");
}
void seek_really(int info, char s1[]) {//精确查询函数
int flag = 0;
number = 1;
for (int i=0;i<n;i++)
{
char *str = compare_info(i, info);//返回待查询的信息类型的字符串值
if (strcmp(str, s1)==0)
{
flag=1;
stutmp[number] = stu[i];
number++;
}
}
if (flag != 1)
printf("该信息不存在!\n");
}
char *compare_info(int i, int info) //修改
{
switch(info) {
case CODE:
return stu[i].code;
case NAME:
return stu[i].name;
case AGE:
return NULL;
case SEX:
return stu[i].sex;
case JOB:
return stu[i].job;
case ADD:
return stu[i].add;
case GONGDI:
return stu[i].gongdi;
case TEL:
return stu[i].tel;
case MAIL:
return stu[i].mail;
case QQ:
return stu[i].qq;
default:
printf("请在1-9之间选择\n");
break;
}
}
void seek()//查找
{
int i,j,item,flag = 0;
int stuinfo;
int mode;
char s1[LEN+1]; // 以姓名和学号最长长度+1为准
char key[LEN+1];
printf("你的注册码是%s\n", Number);//输出Number,注册码
puts("输入编号进行相应信息的查询:");
process_no();
scanf("%d", &stuinfo);
puts("请选择查询方式:\n1: 精确查询\t2:模糊查询");
scanf("%d", &mode);
puts("请输入查询关键字:");
scanf("%s", key);
if (stuinfo == AGE) {
if (mode == 2)
puts("年龄信息不支持模糊查询,将返回精确查询的结果~");
seek_age(key);
goto abc;
} else if (stuinfo == 10) {
return ;
}
if (mode == 1) {
seek_really(stuinfo, key);
} else if (mode == 2) {
seek_foggy(stuinfo, key);
} else {
puts("输入信息有误,请检查后重新输入~");
seek();
}
//////////////////////////////////////////////////////////////
int st;
abc:;
printf("输出查询结果的学生信息:\n1: 按学号排序输出\t2:按姓名排序输出\n");
scanf("%d", &st);
if (st == 1) {
sort(stutmp+1, stutmp + number, cmp1);
} else if (st == 2) {
sort(stutmp+1, stutmp + number, cmp2);
} else {
puts("输入信息有误,请重新输入");
system("pause");
system("color 9e");
system("cls");
goto abc;
}
printf("该学生的编号,姓名,年龄,性别,职位,学校,工作地点,电话,E-mail QQ号码 分别为:\n");
for (i=1;i<number;i++)
{
printf("%s %s %d %s %s %s %s %s %s %s\n",stutmp[i].code,stutmp[i].name,stutmp[i].age,
stutmp[i].sex,stutmp[i].job,stutmp[i].add,stutmp[i].gongdi,stutmp[i].tel,stutmp[i].mail,stutmp[i].qq);
}
////////////////////////////////////////////////////////////
}
void process_no() {//界面里面的小选项
printf("------------------\n");
printf("1.姓名\n");
printf("2.年龄\n");
printf("3.性别\n");
printf("4.职位\n");
printf("5.学校\n");
printf("6.工作地址\n");
printf("7.电话号码\n");
printf("8.E-mail地址\n");
printf("9.QQ号码\n");
printf("10.退出本菜单\n");
printf("------------------\n");
}
int checkEmail(char sl[])
{//判断邮箱是否有重复
int i;
for (i=0;i<n;i++)
{
if (strcmp(stu[i].mail,sl)==0)
{
printf("对不起,这个Email已经有了!操作失败:\n");
return 0;
}
}
return 1;
}
/*************************修改函数**********************/
void modify()
{
int i,j,item,num;
char sex1[3],s1[LEN+1],s2[LEN+1]; // 以姓名和学号最长长度+1为准
display();
printf("请输入要要修改的学生的学号:\n");
scanf("%s",s1);
for (i=0;i<n;i++)
{
if (strcmp(stu[i].code,s1)==0)
{
//显示第i条记录
num = i;
printf("查询到的信息为:\n");
printf("该学生学号 姓名 年龄 性别 职位 家庭地址 电话 E-mail QQ号码 公司地址为:\n");
printf(" %s %s %d %s %s %s %s %s %s %s\n",s1,stu[num].name,stu[num].age,
stu[num].sex,stu[num].job,stu[num].add,stu[num].gongdi,stu[num].tel,stu[num].mail,stu[num].qq);
break;
}
}
if (i>=n)
{
printf("输入学号错误,该学生不存在,请检查后重新输入。\n");
return;
system("pause");
system("color 5e");
system("cl
没有合适的资源?快使用搜索试试~ 我知道了~
通讯录系统源文件(可以运行,功能很多)
共15个文件
dat:2个
pdb:2个
dsp:1个
需积分: 9 7 下载量 183 浏览量
2011-08-31
16:39:03
上传
评论 1
收藏 1.61MB ZIP 举报
温馨提示
此系统包含源代码,功能齐全,运行的界面也很丰富,源代码里面注释很清晰,是值得下载的好东西!
资源推荐
资源详情
资源评论
收起资源包目录
tongxunl.zip (15个子文件)
tongxunl
ͨѶ¼.plg 2KB
ͨѶ¼.cpp 16KB
Cards.dat 9KB
Debug
ͨѶ¼.exe 212KB
vc60.pdb 76KB
ͨѶ¼.pch 4.25MB
vc60.idb 161KB
ͨѶ¼.obj 69KB
Cards.dat 9KB
ͨѶ¼.pdb 457KB
ͨѶ¼.ilk 239KB
ͨѶ¼.dsp 3KB
ͨѶ¼.dsw 520B
ͨѶ¼.ncb 41KB
ͨѶ¼.opt 48KB
共 15 条
- 1
资源评论
莫若涵
- 粉丝: 2
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功