#pragma warning(disable:4996)
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include <windows.h>
typedef struct student
{
long int num;
char name[10];
char sex[5];
long int phone;
char address[100];
};
struct student list[999];
int count = 0;//计数器
int choice_2;
void Welcome();
void ShowMenu();
void Insert();
void Find();
void Delete();
void Update();
void Readingfile();
void Choice();
void Quit();
int main()
{
int choice;
Welcome();
ShowMenu();
scanf("%d", &choice);
do
{
switch (choice)
{
case 1:
Choice();
if (choice_2 == 1)
Readingfile();
else
Insert();
ShowMenu();
scanf("%d", &choice);
continue;
case 2:
Find();
ShowMenu();
scanf("%d", &choice);
continue;
case 3:
Delete();
ShowMenu();
scanf("%d", &choice);
continue;
case 4:
Update();
ShowMenu();
scanf("%d", &choice);
continue;
default:
Quit();
break;
}
} while (choice != 0);
}
//欢迎界面
void Welcome() {
printf("正在进入学生通讯录管理系统............\n");
printf("\n");
printf("\n");
Sleep(1000);
printf("\n*************************************************\n");
printf("** 欢迎进入学生通讯录管理系统 **\n");
printf("*************************************************\n");
Sleep(1000);
}
//菜单界面
void ShowMenu() {
printf("\n");
printf("\n");
printf("\n");
printf("\n正在加载菜单.........\n");
Sleep(2000);
printf("*************************************************\n");
printf("** 菜单 **\n");
printf("*************************************************\n");
printf("\n当前系统中共有%d名学生\n", count);
printf("\n1: 信息录入\n2:信息查询\n3:删除成员\n4:信息更新\n0: 退出系统\n");
printf("请选择要进行的操作:");
}
//模式选择
void Choice()
{
printf("\n");
printf("\n");
printf("\n");
printf("\n正在进入学生通讯录录入系统.........\n");
Sleep(2000);
printf("\n*************************************************\n");
printf("** 欢迎进入学生通讯录录入系统 **\n");
printf("*************************************************\n");
printf("\n1 文件读取\t2 手动输入\n请选择数据读取模式:");
scanf("%d", &choice_2);
}
//读取文件
void Readingfile()
{
printf("请输入需要读取文件的路径:\t");
char path[99];
scanf("%s", &path);
FILE* fp;
if ((fp = fopen(path, "r")) == NULL)
{
printf("can't open file!\n");
exit(0);
}
while (!feof(fp))
{
fscanf(fp, "%s %s %ld %ld %s", &list[count].name, &list[count].sex, &list[count].num, &list[count].phone, &list[count].address);
count++;
}
}
//手动输入数据
void Insert() {
printf("\n");
printf("\n");
printf("\n");
printf("请输入学生的\n姓名:");
scanf("%s", &list[count].name);
printf("请输入学生的\n性别(男/女):");
char InputSex[5];
char Man[5] = "男";
char Woman[7] = "女";
scanf("%s", &InputSex);
if (strcmp(InputSex, Man) == 0 || strcmp(InputSex, Woman) == 0)
{
strcpy(list[count].sex, InputSex);
}
else
{
printf("输入的性别格式错误!\n");
exit(0);
}
printf("请输入学生的\n学号:");
scanf("%ld", &list[count].num);
printf("请输入学生的\n电话:");
scanf("%ld", &list[count].phone);
printf("请输入学生的\n住址:");
scanf("%s", &list[count].address);
printf("\n");
printf("\n");
printf("\n");
printf("提示: 信息录入成功!");
count++;
}
//查询
void Find()
{
printf("\n");
printf("\n");
printf("\n");
printf("\n正在进入学生通讯录查询系统.........\n");
Sleep(2000);
printf("\n*************************************************\n");
printf("** 欢迎进入学生通讯录查询系统 **\n");
printf("*************************************************\n");
char FindName[10] = { 0 };
printf("请输入需要查询的学生的姓名:\n");
scanf("%s", &FindName);
for (int i = 0; i <= count; i++)
{
if (strcmp(FindName, list[i].name) == 0)
{
printf("\n");
printf("\n");
printf("\n");
printf("该学生的信息如下:\n");
printf("姓名:%s\n", list[i].name);
printf("性别:%s\n", list[i].sex);
printf("学号:%ld\n", list[i].num);
printf("电话:%ld\n", list[i].phone);
printf("家庭住址:%s\n", list[i].address);
}
else if (strcmp(FindName, list[i].name) == 0)
{
printf("提示: 没有找到该学生!\n");
}
}
}
//删除
void Delete()
{
printf("\n");
printf("\n");
printf("\n");
printf("\n正在进入学生通讯录删除系统.........\n");
Sleep(2000);
printf("\n*************************************************\n");
printf("** 欢迎进入学生通讯录删除系统 **\n");
printf("*************************************************\n");
char DeleteName[10] = { 0 };
printf("请输入需要删除的学生的姓名:\n");
scanf("%s", &DeleteName);
for (int i = 0; i < count; i++)
{
if (strcmp(DeleteName, list[i].name) == 0)
{
list[i] = list[i + 1];
printf("\n");
printf("\n");
printf("\n");
printf("提示: 信息删除成功!\n");
count--;
}
else
{
printf("\n");
printf("\n");
printf("\n");
printf("提示: 没有找到该学生!\n");
}
}
}
//更新
void Update()
{
printf("\n");
printf("\n");
printf("\n");
printf("\n正在进入学生通讯录更新系统.........\n");
Sleep(2000);
printf("\n*************************************************\n");
printf("** 欢迎进入学生通讯录更新系统 **\n");
printf("*************************************************\n");
char UpdateName[10] = { 0 };
int choice = 0;
printf("请输入需要更新信息的学生的姓名:\n");
scanf("%s", &UpdateName);
for (int i = 0; i < count; i++)
{
if (strcmp(UpdateName, list[i].name) == 0)
{
do
{
printf("请输入需要更改的项目:\n");
printf("1 学号\t2 性别\t3 电话\t4 家庭住址\t0 返回菜单\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("请输入新学号:");
long int newnum;
scanf("%ld", &newnum);
list[i].num = newnum;
printf("请输入需要更改的项目:\n");
printf("1 学号\t2 性别\t3 电话\t4 家庭住址\t0 返回菜单\n");
scanf("%d", &choice);
continue;
case 2:
printf("请输入新性别:");
char newsex[5];
scanf("%s", &newsex);
strcpy(list[i].sex, newsex);
printf("请输入需要更改的项目:\n");
printf("1 学号\t2 性别\t3 电话\t4 家庭住址\t0 返回菜单\n");
scanf("%d", &choice);
continue;
case 3:
printf("请输入新电话:");
long int newphone;
scanf("%ld", &newphone);
list[i].phone = newphone;
printf("请输入需要更改的项目:\n");
printf("1 学号\t2 性别\t3 电话\t4 家庭住址\t0 返回菜单\n");
scanf("%d", &choice);
continue;
case 4:
printf("请输入新住址:");
char newaddress[100];
scanf("%s", &newaddress);
strcpy(list[i].address, newaddress);
printf("请输入需要更改的项目:\n");
printf("1 学号\t2 性别\t3 电话\t4 家庭住址\t0 返回菜单\n");
scanf("%d", &choice);
continue;
default:
printf("请输入正确的选项!\n");
printf("请输入需要更改的项目:\n");
printf("1 学号\t2 性别\t3 电话\t4 家庭住址\t0 返回菜单\n");
scanf("%d", &choice);
continue;
}
} while (choice != 0);
}
else
{
printf("\n");
printf("\n");
printf("\n");
printf("提示: 没有找到该学生!\n");
}
}
}
//退出系统
void Quit()
{
printf("\n正在退出.........\n");
Sleep(3000);
printf("提示: 退出成功!");
}
#define _CRT_SECURE_NO_WARNINGS
#define MAX_NAME 10
#define MAX_AGE 3
#define MAX_GENDER 3
#define MAX_TEL 15
#define MAX_ADRESS 15
#define MAX_RELATION 10
#define INIT_CAPACITY 3
#define ADD_CAPACITY 2
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Data
{
char name[MAX_NAME];
char age[MAX_AGE];
char gender[MAX_GENDER];
char tel[MAX_TEL];
char adress[MAX_ADRESS];
char relation[MAX_RELATION];
};
typedef struct Contact
{
int capacity;
int size;
struct Data*data;
}C;
enum
{
EXIT,
ADD,
DEL,
SERCH,
MODIFY,
DISPLAY,
SORT,
SAVE,
};
void InitC(C*c);
void LoadC(C*c);
void AddC(C*c);
void DelC(C*c);
void SearchC(C*c);
void ModifyC(C*c);
void Display(C*c);
void SortC(C*c);
void SaveC(C*c);
void menu()
{
printf("*************************************\n");
printf("******* 通讯录 *******\n");
printf("******* 1.增加联系人 *******\n");
printf("******* 2.删除联系人 *******\n");
printf("******* 3.查找联系人 *******\n");
printf("******* 4.修改联系人 *******\n");
printf("******* 5.展示联系人 *******\n");
printf("******* 6.联系人排序 *******\n");
printf("******* 7.保存联系人 *******\n");
printf("******* 0.退出通讯录 *******\n");
printf("*************************************\n");
}
void startwork(C*c)
{
InitC(c);
LoadC(c);
int choice;
while(1)
{
system("cls");
menu();
printf("请选择:>\n");
scanf("%d", &choice);
switch (choice)
{
case ADD:
AddC(c);
system("pause");
break;
case DEL:
DelC(c);
system("pause");
break;
case SERCH:
SearchC(c);
system("pause");
break;
case MODIFY:
ModifyC(c);
system("pause");
break;
case SORT:
SortC(c);
system("pause");
break;
case SAVE:
SaveC(c);
system("pause");
break;
case DISPLAY:
Display(c);
system("pause");
break;
case EXIT:
SaveC(c);
exit(0);
break;
default:
printf("选择错误\n");
break;
}
}
}
int main()
{
C c;
startwork(&c);
return 0;
}
void InitC(C*c)
{
c->capacity = INIT_CAPACITY;
c->data = (struct Data*)calloc(c->capacity,sizeof(struct Data));
c->size = 0;
}
void checkcapacity(C*c)
{
if (c->size == c->capacity)
{
c->capacity += ADD_CAPACITY;
c->data = (struct Data*)realloc(c->data, sizeof(struct Data)*(c->capacity));
}
}
void LoadC(C*c)
{
FILE*p = fopen("data.contact", "rb");
while (fread(&(c->data[c->size]), sizeof(c->data[0]), 1, p))
{
c->size++;
checkcapacity(c);
}
fclose(p);
printf("载入成功\n");
}
int Getindex(C*c)
{
int index,i;
char temp[MAX_NAME];
printf("请输入姓名:\n");
scanf("%s", &temp);
for (i = 0; i < c->size; i++)
{
if (!strcmp(c->data[i].name, temp))
{
index = i;
return index;
}
}
printf("无此人信息\n");
return -1;
}
void Receive(C*c,int n)
{
printf("请输入姓名:\n");
scanf("%s", &c->data[n].name);
printf("请输入年龄:\n");
scanf("%s", &c->data[n].age);
printf("请输入性别:\n");
scanf("%s", &c->data[n].gender);
printf("请输入电话:\n");
scanf("%s", &c->data[n].tel);
printf("请输入地址:\n");
scanf("%s", &c->data[n].adress);
printf("请备注关系:\n");
scanf("%s", &c->data[n].relation);
}
void AddC(C*c)
{
checkcapacity(c);
Receive(c,c->size);
c->size++;
printf("添加成功\n");
}
void DelC(C*c)
{
int n = Getindex(c),i;
if(n!=-1)
{
for (i = n; i < c->size; i++)
c->data[i] = c->data[i + 1];
c->size--;
printf("删除成功!\n");
}
}
void SearchC(C*c)
{
int n = Getindex(c);
if (n != -1)
{
printf("姓名 年龄 性别 电话 地址 关系 \n");
printf("%-9s%-7s%-6s%-13s%-12s%-3s\n",
c->data[n].name,
c->data[n].age,
c->data[n].gender,
c->data[n].tel,
c->data[n].adress,
c->data[n].relation);
};
}
void ModifyC(C*c)
{
int n = Getindex(c);
if (n)
Receive(c, n);
printf("修改成功\n");
}
int s_cmp(void*e1, void*e2)
{
return (int)*((char*)e1) - ((int)*((char*)e2));
}
void SortC(C*c)
{
qsort(c->data, c->size, sizeof(c->data[0]), s_cmp);
}
void SaveC(C*c)
{
FILE*p = fopen("data.contact", "wb");
int n = c->size,i;
for (i = 0; i < c->size; i++)
fwrite(&(c->data[i]), sizeof(c->data[0]), 1, p);
fclose(p);
}
void Display(C*c)
{
int i;
printf("姓名 年龄 性别 电话 地址 关系 \n");
for (i = 0; i <c->size; i++)
{
printf("%-9s%-7s%-6s%-13s%-12s%-3s\n",
c->data[i].name,
c->data[i].age,
c->data[i].gender,
c->data[i].tel,
c->data[i].adress,
c->data[i].relation);
}
}
最近写过,有需要可以发给你看看,带思路。