题目要求:

以本班同学的具体数据为背景,设计一个本班同学通讯录

实现以下功能:

0) 用户登录(分为班长和普通同学两种账号,分别有不同权限)

1) 通讯录编辑(添加、删除);

2) 按不同的项进行查找;

3) 对已存在的通讯录按不同的项排序;

4)对已存入信息可以进行更新(如更换地址或手机号等等)

5) 将通讯录写入文件;

6) 从文件读入通讯录。

7)班长拥有所有功能权限,

普通同学可以查看所有信息,但只能更改自己的信息。

班长可以查看所有信息,也可以更改其他同学的信息。

备注:通讯录至少应该有以下数据项:学号,姓名,地址,电话,邮编,E-mail。

请尽量做到界面美观,用户友好。

程序说明:

通讯录.txt : 通讯录存储,默认为空

num.txt:存储联系人个数,默认为0,需手动添加

编译器:vs2017

注意:学号不能相同,不实现排序功能

程序函数说明:

struct Student;//联系人结构体main();//主函数void View();//输出通讯录void Find();//查找void Change();//更改,包括添加,修改void Add();//添加void Replace();//修改void ChangeS();//普通用户修改void Convert();//界面效果

提升空间:

数据输入数组时,频繁使用同一语句

输出时一样

源代码:


#include<iostream>
#include<string>
#include<fstream>
#include<cstdio>
#include<Windows.h>struct Student//结构体
{std::string name;std::string number;std::string address;std::string phonenumber;std::string mail;std::string postcode;
};int main()
{void View();//输出void Find();//查找void Change();//更改,包括添加,修改void Add();//添加void Replace();//修改void ChangeS();//普通用户修改void Convert();void Delete();std::cout << "**欢迎使用**同学通讯录**" << std::endl;std::cout << "**请输入您的身份:\n  1.班长\n  2.普通学生" << std::endl;std::string identify;//身份while (std::cin >> identify){if (!(identify == "1" || identify == "2")){std::cout << "**对不起,您的输入有误!请重新输入:\n";}else{break;}}std::cout << "\n正在登录....";Convert();std::cout << "\n";if (identify == "1")//班长{char temp = 'y';while (temp == 'y'){system("cls");std::cout << "**您拥有以下权限:**" << std::endl;std::cout << "  1.查看通讯录;\n  2.进行查找;\n  3.更改信息;\n  4.退出程序;\n--------------------\n";std::cout << "**请选择您想进行的操作,输入序号:";std::string strNum;int num;while (std::cin >> strNum){if (!(strNum == "1" || strNum == "2" || strNum == "3" || strNum == "4")){std::cout << "**对不起,您的输入有误!请重新输入:\n";}else{break;}}num = std::stoi(strNum);//格式转换switch (num){case 1:View(); break;case 2:Find(); break;case 3:Change(); break;case 4:temp = 'n'; break;}}}if (identify == "2")//普通学生{char temp = 'y';while (temp == 'y'){system("cls");std::cout << "**您拥有以下权限:**" << std::endl;std::cout << "  1.查看通讯录;\n  2.进行查找;\n  3.更改自己的信息;\n  4.退出程序;\n------------------\n";std::cout << "**请选择您想进行的操作,输入序号:";std::string strNum;int num;while (std::cin >> strNum){if (!(strNum == "1" || strNum == "2" || strNum == "3" || strNum == "4")){std::cout << "**对不起,您的输入有误!请重新输入:\n";}else{break;}}num = std::stoi(strNum);switch (num){case 1:View(); break;case 2:Find(); break;case 3:ChangeS(); break;case 4:temp = 'n'; break;}}}std::cout << "\n正在退出....";Convert();system("pause");return 0;
}void View()//查看
{void Convert();std::ifstream myFile;myFile.open("通讯录.txt", std::ios::binary);std::cout << "\n正在输出数据....";Convert();int ch;ch = myFile.peek();if (ch == EOF){std::cout << "\n**非常抱歉!通讯录里面空空荡荡!**\n" << std::endl;}std::ifstream save("num.txt");std::string x;getline(save, x);int y = std::stoi(x);std::string str;Student s2[100];int tempnum = 1;int i = 0;while (getline(myFile, str)){if (tempnum == 1){s2[i].name = str;tempnum++;std::cout << s2[i].name;continue;}if (tempnum == 2){s2[i].number = str;tempnum++;continue;}if (tempnum == 3){s2[i].phonenumber = str;tempnum++;continue;}if (tempnum == 4){s2[i].mail = str;tempnum++;continue;}if (tempnum == 5){s2[i].address = str;tempnum++;continue;}if (tempnum == 6){s2[i].postcode = str;tempnum = 1;i++;continue;}}for (int k = 0; k < y; k++){std::cout << "第" << k + 1 << "位联系人:\n";std::cout << " 姓名:" << s2[k].name << "\n 学号:" << s2[k].number << "\n 电话号码:" << s2[k].phonenumber << "\n 邮箱:" << s2[k].mail << "\n 地址:" << s2[k].address << "\n 邮编:" << s2[k].postcode << "\n\n";}save.close();myFile.close();system("pause");
}void Change()//更改
{void Add();void Replace();void Delete();while (1){system("cls");std::cout << "**现在您可以进行以下操作:\n 1.添加联系人;\n 2.修改联系人;\n 3.删除联系人;\n 4.返回主菜单" << std::endl;std::string choice;while (std::cin >> choice){if (!(choice == "1" || choice == "2" || choice == "3" || choice == "4")){std::cout << "**对不起,您的输入有误!请重新输入:\n";}else{break;}}std::string temp;temp = "1";if (choice == "1"){while (temp == "1"){Add();std::cout << "**您是否想继续添加?**\n 1.是\n 2.否\n";while (std::cin >> temp){if (!(temp == "1" || temp == "2")){std::cout << "**对不起,您的输入有误!请重新输入:**\n";}else{break;}}if (temp == "2"){break;}}}if (choice == "2"){Replace();}if (choice == "3"){Delete();}if (choice == "4"){break;}}
}void Add()//添加
{void Convert();std::ofstream myFile("通讯录.txt", std::ios::app);std::ifstream save("num.txt", std::ios::app);std::string x;getline(save, x);int y = std::stoi(x);y++;save.close();Student student;std::cout << "**请输入姓名:\n";std::cin >> student.name;std::cout << "**请输入学号:\n";std::cin >> student.number;std::cout << "**请输入地址:\n";std::cin >> student.address;std::cout << "**请输入电话号码:\n";std::cin >> student.phonenumber;std::cout << "**请输入邮箱:\n";std::cin >> student.mail;std::cout << "**请输入邮编:\n";std::cin >> student.postcode;myFile << student.name << "\n" << student.number << "\n" << student.phonenumber << "\n" << student.mail << "\n" << student.address << "\n" << student.postcode << "\n";std::cout << "\n正在保存....";Convert();std::cout << "**保存成功!**\n" << std::endl;std::ofstream save1("num.txt", std::ios::trunc);save1 << y;myFile.close();save.close();
}
void Replace()//修改
{void Convert();std::ifstream myFile("通讯录.txt");std::ifstream save("num.txt");std::string x;getline(save, x);int y = std::stoi(x);std::string str;Student s2[100];int tempnum = 1;int i = 0;while (getline(myFile, str)){if (tempnum == 1){s2[i].name = str;tempnum++;continue;}if (tempnum == 2){s2[i].number = str;tempnum++;continue;}if (tempnum == 3){s2[i].phonenumber = str;tempnum++;continue;}if (tempnum == 4){s2[i].mail = str;tempnum++;continue;}if (tempnum == 5){s2[i].address = str;tempnum++;continue;}if (tempnum == 6){s2[i].postcode = str;tempnum = 1;i++;continue;}}int num = 0;std::string str2;while (num == 0){std::cout << "**输入您想修改的学生学号:";std::cin >> str2;for (int j = 0; j < y; j++){if (str2 == s2[j].number){std::cout << " 1.姓名:" << s2[j].name << "\n 2.学号:" << s2[j].number << "\n 3.电话号码:" << s2[j].phonenumber << "\n 4.邮箱:" << s2[j].mail << "\n 5.地址:" << s2[j].address << "\n 6.邮编:" << s2[j].postcode << "\n";num++;}if (j == y - 1 && num == 0){std::cout << "**Not Found!**\n" << std::endl;}}}std::cout << "**输入您想修改的信息的序号:";std::string str3;std::string strNum;int temp;while (std::cin >> strNum){if (!(strNum == "1" || strNum == "2" || strNum == "3" || strNum == "4" || strNum == "5" || strNum == "6")){std::cout << "**对不起,您的输入有误!请重新输入:\n";}else{break;}}temp = std::stoi(strNum);std::cout << "**输入修改后的信息:";std::string str4;std::cin >> str4;int flag = 0;for (int j = 0; j < y; j++){if (str2 == s2[j].number){switch (temp){case 1:s2[j].name = str4; break;case 2:s2[j].number = str4; break;case 3:s2[j].phonenumber = str4; break;case 4:s2[j].mail = str4; break;case 5:s2[j].address = str4; break;case 6:s2[j].postcode = str4; break;}flag++;}if (j == y - 1 && flag == 0){std::cout << "**Not Found!**\n" << std::endl;}}myFile.close();std::ofstream myFile2("通讯录.txt", std::ios::trunc);for (int k = 0; k < y; k++){myFile2 << s2[k].name << "\n" << s2[k].number << "\n" << s2[k].phonenumber << "\n" << s2[k].mail << "\n" << s2[k].address << "\n" << s2[k].postcode << "\n";}std::cout << "正在修改....";Convert();std::cout << "**修改成功!**\n" << std::endl;myFile2.close();save.close();system("pause");
}
void Find()//查找
{void Convert();std::ifstream myFile("通讯录.txt");std::ifstream save("num.txt");std::string x;getline(save, x);int y = std::stoi(x);if (y == 0){std::cout << "\n**非常抱歉!通讯录里面空空荡荡!**\n" << std::endl;}else{std::string str;Student s2[100];int tempnum = 1;int i = 0;while (getline(myFile, str)){if (tempnum == 1){s2[i].name = str;tempnum++;continue;}if (tempnum == 2){s2[i].number = str;tempnum++;continue;}if (tempnum == 3){s2[i].phonenumber = str;tempnum++;continue;}if (tempnum == 4){s2[i].mail = str;tempnum++;continue;}if (tempnum == 5){s2[i].address = str;tempnum++;continue;}if (tempnum == 6){s2[i].postcode = str;tempnum = 1;i++;continue;}}std::cout << "**输入你要查找的某一项具体的信息:";std::string str1;std::cin >> str1;int num = 0;for (int j = 0; j < y; j++){if (str1 == s2[j].name || str1 == s2[j].number || str1 == s2[j].phonenumber || str1 == s2[j].mail || str1 == s2[j].address || str1 == s2[j].postcode){std::cout << "\n正在查找....";Convert();std::cout << " 姓名:" << s2[j].name << "\n 学号:" << s2[j].number << "\n 电话号码:" << s2[j].phonenumber << "\n 邮箱:" << s2[j].mail << "\n 地址:" << s2[j].address << "\n 邮编:" << s2[j].postcode << "\n";num++;std::cout << "**查找成功!**\n" << std::endl;}if (j == y - 1 && num == 0){std::cout << "**Not Found!**\n" << std::endl;}}}myFile.close();system("pause");
}
void ChangeS()//普通用户修改
{void Convert();std::ifstream myFile("通讯录.txt");std::ifstream save("num.txt");std::string x;getline(save, x);int y = std::stoi(x);if (y == 0){std::cout << "\n**非常抱歉!通讯录里面空空荡荡!**\n" << std::endl;}else{std::string str;Student s2[100];int tempnum = 1;int i = 0;while (getline(myFile, str)){if (tempnum == 1){s2[i].name = str;tempnum++;continue;}if (tempnum == 2){s2[i].number = str;tempnum++;continue;}if (tempnum == 3){s2[i].phonenumber = str;tempnum++;continue;}if (tempnum == 4){s2[i].mail = str;tempnum++;continue;}if (tempnum == 5){s2[i].address = str;tempnum++;continue;}if (tempnum == 6){s2[i].postcode = str;tempnum = 1;i++;continue;}}std::cout << "**输入你的学号:";std::string str1;std::cin >> str1;int num = 0;for (int j = 0; j < y; j++){if (str1 == s2[j].number){std::cout << " 姓名:" << s2[j].name << "\n 学号:" << s2[j].number << "\n 电话号码:" << s2[j].phonenumber << "\n 邮箱:" << s2[j].mail << "\n 地址:" << s2[j].address << "\n 邮编:" << s2[j].postcode << "\n";std::cout << "**输入您想修改的信息:";std::string str2;std::cin >> str2;std::cout << "**输入修改后的信息:";std::string str3;std::cin >> str3;if (str2 == s2[j].name)       s2[j].name = str3;if (str2 == s2[j].number)     s2[j].number = str3;if (str2 == s2[j].phonenumber)s2[j].phonenumber = str3;if (str2 == s2[j].mail)       s2[j].mail = str3;if (str2 == s2[j].address)    s2[j].address = str3;if (str2 == s2[j].postcode)   s2[j].postcode = str3;num++;}if (j == y - 1 && num == 0){std::cout << "**Not Found!**\n" << std::endl;}}myFile.close();if (num != 0){std::ofstream myFile2("通讯录.txt", std::ios::trunc);for (int k = 0; k < y; k++){myFile2 << s2[k].name << "\n" << s2[k].number << "\n" << s2[k].phonenumber << "\n" << s2[k].mail << "\n" << s2[k].address << "\n" << s2[k].postcode << "\n";}std::cout << "\n正在修改....";Convert();std::cout << "**修改完成!**" << std::endl;myFile2.close();}}save.close();system("pause");
}
void Convert()
{for (int i = 0; i < 100; i++){std::cout.width(3);std::cout << i << "%";Sleep(1);std::cout << "\b\b\b\b";}std::cout << "\n";
}
void Delete()
{void Convert();std::ifstream myFile("通讯录.txt");std::ifstream save("num.txt");std::string x;getline(save, x);int y = std::stoi(x);std::string str;Student s2[100];int tempnum = 1;int i = 0;while (getline(myFile, str)){if (tempnum == 1){s2[i].name = str;tempnum++;continue;}if (tempnum == 2){s2[i].number = str;tempnum++;continue;}if (tempnum == 3){s2[i].phonenumber = str;tempnum++;continue;}if (tempnum == 4){s2[i].mail = str;tempnum++;continue;}if (tempnum == 5){s2[i].address = str;tempnum++;continue;}if (tempnum == 6){s2[i].postcode = str;tempnum = 1;i++;continue;}}std::cout << "输入您想删除的学生学号:";std::string str2;std::cin >> str2;int num = 0;int temp;for (int j = 0; j < y; j++){if (str2 == s2[j].number){std::cout << "\n正在查找....";Convert();std::cout << "\n";std::cout << " 姓名:" << s2[j].name << "\n 学号:" << s2[j].number << "\n 电话号码:" << s2[j].phonenumber << "\n 邮箱:" << s2[j].mail << "\n 地址:" << s2[j].address << "\n 邮编:" << s2[j].postcode << "\n";num++;temp = j;}if (j == y - 1 && num == 0){std::cout << "**Not Found!**\n" << std::endl;}}myFile.close();save.close();std::ofstream myFile2("通讯录.txt", std::ios::trunc);for (int k = 0; k < temp; k++){myFile2 << s2[k].name << "\n" << s2[k].number << "\n" << s2[k].phonenumber << "\n" << s2[k].mail << "\n" << s2[k].address << "\n" << s2[k].postcode << "\n";}for (int k = temp + 1; k < y - 1; k++){myFile2 << s2[k].name << "\n" << s2[k].number << "\n" << s2[k].phonenumber << "\n" << s2[k].mail << "\n" << s2[k].address << "\n" << s2[k].postcode << "\n";}std::ofstream save1("num.txt", std::ios::trunc);y--;save1 << y;std::cout << "\n正在删除....";Convert();std::cout << "\n**删除成功!**" << std::endl;myFile.close();save.close();system("pause");
}

c++作业之同学通讯录相关推荐

  1. 吉林大学2013级大一下学期程序设计作业:同学通讯录系统

    <程序设计基础课程设计>题目(2013级) 1.内容简介 编写一个C语言程序,实现同学通讯录管理功能.其中: 1)至少能够管理50位同学的个人信息和通讯信息,个人信息和通讯信息需要有较强的 ...

  2. 基于javaweb的校园班级同学通讯录管理系统(java+ssm+html+jsp+mysql)

    基于javaweb的校园班级同学通讯录管理系统(java+ssm+html+jsp+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/my ...

  3. C++大作业--班级同学信息管理系统

    在这个学期,老师布置了C++课程程序设计报告 题目如下: 所设计的班级同学信息管理系统应具有以下功能: 1.登录功能:登录该系统时需要输入登录密码,默认的密码是666,可修改登录密码. 2.数据输入功 ...

  4. 面向对象程序设计课程设计——MFC实现同学通讯录管理系统

    先上效果图; 1.设计目的 同学通讯录管理程序是为了更好地管理学生信息而开发的数据管理软件.如今,同学与同学.老师与同学联系都是通过电话联系.但是,通常这些数据与其他人的信息混合在一起,同学信息并不方 ...

  5. html5学生大作业,帮同学做的大一大作业:《我的家乡—郑州》 - 梦涵的帅爸爸...

    ---恢复内容开始--- 最近在上海上学的一个高中同学让我帮忙,帮她做她们的计算机课程大作业. 由于关系不错我也不好意思拒绝就帮忙做了,因为这个学期刚刚开始接触HTML5和css,所以制作过程中有很多 ...

  6. 数据结构通过链表实现班级同学通讯录

    题: 程序主菜单包含以下几个功能: (1)添加记录:通过键盘输入信息,添加一条通讯录记录. (2)删除记录:通过键盘输入学号,删除该学号的记录. (3)输出记录:输出通讯录全部记录. (4)按姓名查 ...

  7. N35-第九周作业-张同学

    1.编写脚本/bin/per.sh判断当前用户对指定参数文件,是否不可读写? #!/bin/bash ######################### #filename:per.sh #descr ...

  8. java 自考qq群_学生建QQ群 成绩好的同学作业答案发群共享

    班里建一个QQ群,由成绩好.做作业认真的同学先做完作业,拍张照片发至群里,班上其他同学都来抄答案.家长发现后,觉得不好向老师举报,很是纠结. 据刘女士介绍,儿子小军(化名)在一家中学读初一,最近一段时 ...

  9. 计算机课给别人交作业检讨书,关于给同学抄作业检讨书范文

    抄作业不对,给同学抄作业也不行.这不是帮助同学,反而是害了他.如果长此以往,同学就会有依赖性,我们平时的作业给他抄了,那考试的时候他能抄谁的呢?下面学习啦小编给大家准备了给同学抄作业检讨,希望大家不要 ...

最新文章

  1. centos7 mysql workbench_centOS下mysql workbench安装配置教程
  2. Client使用c#和odp.net连接server oracle
  3. Android EditText的设置
  4. python argparse模块详解_python中argparse模块用法实例详解
  5. 思科网络基础之访问控制列表
  6. JVM(一)史上最佳入门指南
  7. 使用命令重定向操作符 (Redirection Operators)
  8. 论《LEFT JOIN条件放ON和WHERE后的区别》
  9. Android IntentService的使用与源码解析
  10. wow修改人物模型_人物修改教程更仔细
  11. npm发布vue组件库
  12. ncbi查找目的基因序列_如何用NCBI和uniprot数据库查找目的蛋白的氨基酸序列或目的基因的碱基序列...
  13. idea文件夹代颜色代表的含义
  14. 为 Drupal 7 构建一个新主题
  15. contiki学习笔记(十二)UIPTCP/IP协议
  16. Java根据IP地址/掩码位(CIDR)和起始IP-终止IP计算网段(IPV4和IPV6)
  17. python-matplotlib 绘制函数曲线
  18. html背景对联效果恭贺新春,恭贺新春的对联
  19. 开关电源:效率与VOUT的关系
  20. 未来十年Python的前景会怎样?(知乎)

热门文章

  1. LINE上市后引发的一场社交软件宫斗戏
  2. 如何看懂公司的财务报表(3)
  3. 2021年低压电工模拟考试题及低压电工理论考试
  4. flowable工作流子流程调用
  5. 从共享单车看城市云反射弧的工作运行机制
  6. 两台电脑上的虚拟机之间相互通信
  7. 分享一个有趣的shell脚本--单词及字母去重排序案例
  8. 程序人生的四个象限和两条主线(转)
  9. 计算机数制表示方法,计算机中的数制表示
  10. 如何解决在虚拟机中安装Linux系统后界面过小的问题