通讯录(带保存功能)

来源:互联网 发布:21天学通c语言百度云 编辑:程序博客网 时间:2024/05/16 09:16
#pragma once#include<iostream>#include<string.h>#include<stdio.h>#include<string>#define NAME_MAX 10#define SEX_MAX 2#define TELNUM_MAX 11#define DATE_MAX   100#define AGE_MAX    10using namespace std;typedef struct Messenge {               //用于存放个人信息 char name[NAME_MAX];char sex[SEX_MAX];char a;                          /*无用的,主要是发现在输出sex和age是,两个数据容易交叉在一起,怀疑是分配内存是两块的地址连一次了,哪位大神懂的话指出下*/char age[AGE_MAX];char tel[TELNUM_MAX];}Messenge;typedef struct book {                  //定义一个通讯录Messenge date[DATE_MAX];int num;}book;void push_date(book *b);void delete_date(book *b, string name);int locat_date(book *b, string name);void change_date(book *b, string name);void traverse_book(book *b);int choice1();int choice2();void Read_file(book *b);void Save_file(book *b);void push_date(book *b) {           //往通讯录中添加新成员string name;cout << "请输入名字:";cin >> b->date[b->num].name;cout << "请输入性别:";scanf("%s", b->date[b->num].sex);cout << "请输入年龄:";scanf("%s", &b->date[b->num].age);cout << "请输入号码:";scanf("%s", b->date[b->num].tel);b->num++;}int locat_date(book *b, string name) {          //查询成员,并返回地址Messenge *p;int pos = 0;p = b->date;while ((!operator==(p->name, name))&&pos<b->num) { ++p; ++pos; }if (operator==(p->name, name))   return pos+1;else return 0;}void delete_date(book *b, string name) {      //删除成员int pos = locat_date(b, name);if (pos == 0)  cout << "在通讯录里找不到此人!" << endl;else {int i = 0;int p = pos;while (i < (b->num - pos)) {b->date[p - 1] = b->date[p];++p;++i;}--b->num;}}void change_date(book *b, string name) {      //修改数据int pos = locat_date(b, name);if (pos == 0)  cout << "在通讯录里找不到此人!" << endl;else {while (1) {int choice = choice1();switch (choice) {case 0:return;case 1: {cout << "输入更改数据:";cin >> b->date[pos-1].name;cout << "修改成功" << endl;}break;case 2: {cout << "输入更改数据:";cin >> b->date[pos-1].sex;cout << "修改成功" << endl;}break;case 3: {cout << "输入更改数据:";cin >> b->date[pos - 1].age;cout << "修改成功" << endl;}break;case 4: {cout << "输入更改数据:";cin >> b->date[pos-1].tel;cout << "修改成功" << endl;}break;default:return;}}}}void traverse_book(book *b) {            //遍历通讯录if (!b->num) cout << "这是一个空的通讯录" << endl;else {int i = 0;while (i < b->num) {cout << "---------------" << endl;cout << "姓名:" << b->date[i].name << endl;cout << "性别:" << b->date[i].sex << endl;cout << "年龄:" << b->date[i].age << endl;cout << "号码:" << b->date[i].tel << endl;++i;}}}int choice1(){                    //修改要修改的信息int choice;cout << "---------------------------" << endl;cout << "请输入你需要修改的数据:" << endl;cout << "0.退出" << endl;cout << "1.改名字" << endl;cout << "2.改性别" << endl;cout << "3.改年龄" << endl;cout << "4.改号码" << endl;cout << "---------------------------" << endl;cout << "您的选择:";cin >> choice;return choice;}int choice2() {                  //选择对通讯录进行的操作int choice;cout << "---------------------------" << endl;cout << "请输入你需要对通讯录进行的操作:" << endl;cout << "0.退出" << endl;cout << "1.插入" << endl;cout << "2.查找" << endl;cout << "3.修改" << endl;cout << "4.删除" << endl;cout << "5.显示整个通讯录" << endl;cout << "---------------------------" << endl;cout << "您的选择:";cin >> choice;return choice;}void Read_file(book *b) {                  //读取存储在文件里面的信息char line[1024];int len;FILE *f;f = fopen("你好.txt", "r");int i = 0;int j = 0;while (fgets(line,1024,f)) {len = strlen(line);line[len - 1] = 0;if (i == 0)    strcpy(b->date[j].name, line);else if (i == 1)  strcpy(b->date[j].sex, line);else if (i == 2)  strcpy(b->date[j].age, line);else if (i == 3) strcpy(b->date[j].tel, line);++i;if (!(i % 4)) { ++b->num, ++j; }i = i % 4;}fclose(f);}void Save_file(book *b) {              //保持信息FILE *f;f = fopen("你好.txt", "w");int i = 0;while (i < b->num) {fputs(b->date[i].name, f);fputs("\n", f);fputs(b->date[i].sex, f);fputs("\n", f);fputs(b->date[i].age, f);fputs("\n", f);fputs(b->date[i].tel, f);if(i!=b->num)fputs("\n", f);++i;}fclose(f);}void test() {                       //测试book *b;if(!(b = (book *)malloc(sizeof(book)))) cout << "初始化失败" <<endl;b->num = 0;Read_file(b);while (1) {int choice = choice2();switch (choice) {case 0:{Save_file(b);return;}case 1: {push_date(b);cout << "成功" << endl;}break;case 2: {int pos;char name[NAME_MAX];cout << "请输入你要查找人的名字:";cin >> name;pos=locat_date( b, name);cout << "---------------" << endl;cout << "姓名:" << b->date[pos-1].name << endl;cout << "性别:" << b->date[pos-1].sex << endl;cout << "年龄:" << b->date[pos-1].age << endl;cout << "号码:" << b->date[pos-1].tel << endl;}break;case 3: {char name[NAME_MAX];cout << "请输入你要修改人的名字:";cin >> name;change_date(b, name);cout << "修改成功" << endl;}break;case 4: {char name[NAME_MAX];cout << "请输入你要删除人的名字:";cin >> name;delete_date(b,name);}break;case 5: {traverse_book(b);}break;}}}#include"numbook.h"void main() {    test();    system("pause");}


0 0