最近打算重新把C++学习一遍;起因是准备考研的时候只看了谭浩强的书,觉得十分混乱,知识点很零散,连贯不起来,所以重新系统地学一遍,感觉会让自己对知识点掌握的更好,对以后学习新东西也有好处。
这个项目是学到结构体这一节的时候的一个练手的项目,原本的项目是把所有代码全和在一个源文件中的,但自己写的时候把它们分开了;在这个过程中也学到了很多东西,有些是自己从没用过的命令,有些是自己没遇到的问题,现在把它们记录下来,作为一个新的开始。
项目名:
联系人管理系统
需求分析:实现管理系统的七个功能
1. 添加联系人
2. 显示联系人
3. 删除联系人
4. 查找联系人
5. 修改联系人
6. 清楚通讯录
7. 退出管理系统
如何实现:整个代码分成三个部分
- connect头文件:用于定义结构体和声明函数
- function源文件:用于函数的实现
- main源文件:用于系统功能的实现
主要思路:定义person结构体(联系人)和addressbooks结构体(通讯录);一本通讯录中有很多个联系人;整个功能用switch语句,用以识别输入的指令并执行相应的功能。
⚠注意:由于本人VS输出中文时乱码,所以整个系统的提示输出均由本人蹩脚的英语代替,请酌情借鉴
现在咱们开始code
Code
菜单界面
先设计一个菜单界面,供用户选择功能
void showMune() {
cout << " =============================" << endl;
cout << "|| 1-Add_one ||" << endl; //添加联系人
cout << "|| 2-Show_one ||" << endl; //显示联系人
cout << "|| 3-Delete_one ||" << endl; //删除联系人
cout << "|| 4-Find_one ||" << endl; //查找联系人
cout << "|| 5-Change_one ||" << endl; //修改联系人
cout << "|| 6-Clear_all ||" << endl; //清空联系人
cout << "|| 0-exit_system ||" << endl; //退出系统
cout << " =============================" << endl;
}
联系人和通讯录
接着来定义联系人和通讯录结构体
const int MAX = 100;
struct person { //联系人结构
string name; //名字
int gender; //性别
int age; //年龄
string phone_number; //电话号码
string address; //地址
};
struct addressbooks {
person personArry[MAX];
//已经录入的人数
int psize = 0;
};
main
main源文件,控制整个系统的运转
#include<iostream>
#include<connect.h>
using namespace std;
int main() {
int select = 0;
addressbooks index;
while (true)
{
showMune(); //显示功能菜单
cout << "please chose a function: " << endl; //输入要选择的功能
cin >> select;
switch (select)
{
//添加联系人
case 1:
add_one(&index);
break;
//显示联系人
case 2:
show_one(&index);
break;
//删除联系人
case 3:
delete_one(&index);
break;
//查找联系人
case 4:
find_one(&index);
break;
//修改联系人
case 5:
change_one(&index);
break;
//清除联系人
case 6:
clear_all(&index);
break;
//退出系统
case 0:
cout << "exit the system" << endl;
return 0;
}
system("pause");
system("cls"); //为防止输出的内容过多,进行清屏操作
}
//system("pause");
return 0;
}
菜单界面
这样整个系统的框架基本上就搭好了
然后是各个功能的实现,查找删除功能等是通过名字来查找的,所以为了方便写了一个判断通讯录中有无联系人的函数
//检测联系人是否存在,如果存在则返回具体位置,否则返回-1
int isExist(addressbooks * index,string name) {
//遍历通讯录,查找名字
for (int i = 0; i < index->psize; i++)
if (index->personArry[i].name == name)
return i; //返回下标编号
return -1; //没找到则返回-1
}
现在可以开始添加其他功能了
功能
添加联系人
//添加功能
void add_one(addressbooks * index) {
//先判断是否已经填满
if (index->psize >= MAX) {
cout << "Sorry,It's full!" << endl;
return;
}
else
{
//未满,则开始录入数据
cout << "please enter name: " << endl;
cin >> index->personArry[index->psize].name;
cout << "please enter gender: " << endl;
cout << "1--man\n2--woman" << endl;
cin >> index->personArry[index->psize].gender;
cout << "please enter age: " << endl;
cin >> index->personArry[index->psize].age;
cout << "please enter phone number: " << endl;
cin >> index->personArry[index->psize].phone_number;
cout << "please enter address: " << endl;
cin >> index->personArry[index->psize].address;
cout << "opration is done!" << endl;
}
index->psize++; //输入成功则+1
}
显示联系人
//显示功能
void show_one(addressbooks * index) {
if (index->psize == 0) { //没有联系人
cout << "there is no person" << endl;
}
else if(index->psize < 0) //计数器出现负数,出错
{
cout << "system error" << endl;
}
else
{
for (int i = 0; i < index->psize; i++) {
cout << setw(8) << setfill(' ') << setiosflags(ios::left) << endl;
cout << index->personArry[i].name;
cout << setw(8) << setfill(' ') << setiosflags(ios::left);
cout << (index->personArry[i].gender == 1 ? "man":"woman");
cout << setw(8) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[i].age;
cout << setw(15) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[i].phone_number;
cout << setw(15) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[i].address;
cout << endl;
}
}
}
删除联系人
//删除功能
void delete_one(addressbooks * index) {
//输入人名
string name;
cout << "please enter the one you want to delete: " << endl;
cin >> name;
//先判断有没有这个人
int ret = isExist(index, name); //ret存放要删除的人在数组中的位置,没有则是-1
if (ret == -1)
cout << "this one dose not exist!" << endl; //发现不存在
else
{
for (int i = ret; i < index->psize;i++) {
//找到了这个人,数据前移
index->personArry[i] = index->personArry[i + 1];
}
index->psize--; //剔除被删除的人占的位置
cout << "delete successful!" << endl; //删除成功
}
}
查找联系人
//查找功能
void find_one(addressbooks * index) {
//输入人名
string name;
cout << "please enter the one you want to find: " << endl;
cin >> name;
//先判断有没有这个人
int ret = isExist(index, name);
if (ret == -1)
cout << "this one dose not exist!" << endl;
else
{
cout << setw(8) << setfill(' ') << setiosflags(ios::left) << endl;
cout << index->personArry[ret].name;
cout << setw(8) << setfill(' ') << setiosflags(ios::left);
cout << (index->personArry[ret].gender == 1 ? "man" : "woman");
cout << setw(8) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[ret].age;
cout << setw(15) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[ret].phone_number;
cout << setw(15) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[ret].address;
cout << endl;
cout << "find successful!" << endl;
}
}
修改联系人
//修改联系人
void change_one(addressbooks * index) {
//输入人名
string name;
cout << "please enter the one you want to change: " << endl;
cin >> name;
//先判断有没有这个人
int ret = isExist(index, name);
if(ret == -1)
cout << "this one dose not exist!" << endl;
else
{
//找到联系人,进行修改,输入修改数据
index->personArry[ret].name = name;
cout << "please enter gender: " << endl;
cout << "1--man\n2--woman" << endl;
int gender = 1;
cin >> gender;
index->personArry[ret].gender = gender;
cout << "please enter age: " << endl;
int age = 0;
cin >> age;
index->personArry[ret].age = age;
cout << "please enter phone number: " << endl;
string phone_numbe;
cin >> phone_numbe;
index->personArry[ret].phone_number = phone_numbe;
cout << "please enter address: " << endl;
string address;
cin >> address;
index->personArry[ret].address = address;
cout << "modify complete!" << endl;
}
}
清空通讯录
void clear_all(addressbooks* index) { //清空通讯录
index->psize = 0;
cout << "clear done!" << endl; //只需要做逻辑上的清空,等要录入时覆盖掉原数据就好
}
到此整个系统的功能就设计完了ヾ(•ω•`)o
现在附上完整的代码
connect.h
#pragma once
#include<iostream>
using namespace std;
const int MAX = 100;
struct person { //联系人结构
string name; //名字
int gender; //性别
int age; //年龄
string phone_number; //电话号码
string address; //地址
};
struct addressbooks {
person personArry[MAX];
//已经录入的人数
int psize = 0;
};
void showMune();
void add_one(addressbooks* index);
void show_one(addressbooks* index);
int isExist(addressbooks* index, string name);
void delete_one(addressbooks* index);
void find_one(addressbooks* index);
void change_one(addressbooks* index);
void clear_all(addressbooks* index);
function.cpp
#include<iostream>
#include<string>
#include<connect.h>
#include<iomanip>
using namespace std;
void showMune() {
cout << " =============================" << endl;
cout << "|| 1-Add_one ||" << endl; //添加联系人
cout << "|| 2-Show_one ||" << endl; //显示联系人
cout << "|| 3-Delete_one ||" << endl; //删除联系人
cout << "|| 4-Find_one ||" << endl; //查找联系人
cout << "|| 5-Change_one ||" << endl; //修改联系人
cout << "|| 6-Clear_all ||" << endl; //清空联系人
cout << "|| 0-exit_system ||" << endl; //退出系统
cout << " =============================" << endl;
}
//添加功能
void add_one(addressbooks * index) {
//先判断是否已经填满
if (index->psize >= MAX) {
cout << "Sorry,It's full!" << endl;
return;
}
else
{
//未满,则开始录入数据
cout << "please enter name: " << endl;
cin >> index->personArry[index->psize].name;
cout << "please enter gender: " << endl;
cout << "1--man\n2--woman" << endl;
cin >> index->personArry[index->psize].gender;
cout << "please enter age: " << endl;
cin >> index->personArry[index->psize].age;
cout << "please enter phone number: " << endl;
cin >> index->personArry[index->psize].phone_number;
cout << "please enter address: " << endl;
cin >> index->personArry[index->psize].address;
cout << "opration is done!" << endl;
}
index->psize++; //输入成功则+1
}
//显示功能
void show_one(addressbooks * index) {
if (index->psize == 0) { //没有联系人
cout << "there is no person" << endl;
}
else if(index->psize < 0) //计数器出现负数,出错
{
cout << "system error" << endl;
}
else
{
for (int i = 0; i < index->psize; i++) {
cout << setw(8) << setfill(' ') << setiosflags(ios::left) << endl;
cout << index->personArry[i].name;
cout << setw(8) << setfill(' ') << setiosflags(ios::left);
cout << (index->personArry[i].gender == 1 ? "man":"woman");
cout << setw(8) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[i].age;
cout << setw(15) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[i].phone_number;
cout << setw(15) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[i].address;
cout << endl;
}
}
}
//检测联系人是否存在,如果存在则返回具体位置,否则返回-1
int isExist(addressbooks * index,string name) {
//遍历通讯录,查找名字
for (int i = 0; i < index->psize; i++)
if (index->personArry[i].name == name)
return i; //返回下标编号
return -1; //没找到则返回-1
}
//删除功能
void delete_one(addressbooks * index) {
//输入人名
string name;
cout << "please enter the one you want to delete: " << endl;
cin >> name;
//先判断有没有这个人
int ret = isExist(index, name); //ret存放要删除的人在数组中的位置,没有则是-1
if (ret == -1)
cout << "this one dose not exist!" << endl; //发现不存在
else
{
for (int i = ret; i < index->psize;i++) {
//找到了这个人,数据前移
index->personArry[i] = index->personArry[i + 1];
}
index->psize--; //剔除被删除的人占的位置
cout << "delete successful!" << endl; //删除成功
}
}
//查找功能
void find_one(addressbooks * index) {
//输入人名
string name;
cout << "please enter the one you want to find: " << endl;
cin >> name;
//先判断有没有这个人
int ret = isExist(index, name);
if (ret == -1)
cout << "this one dose not exist!" << endl;
else
{
cout << setw(8) << setfill(' ') << setiosflags(ios::left) << endl;
cout << index->personArry[ret].name;
cout << setw(8) << setfill(' ') << setiosflags(ios::left);
cout << (index->personArry[ret].gender == 1 ? "man" : "woman");
cout << setw(8) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[ret].age;
cout << setw(15) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[ret].phone_number;
cout << setw(15) << setfill(' ') << setiosflags(ios::left);
cout << index->personArry[ret].address;
cout << endl;
cout << "find successful!" << endl;
}
}
//修改联系人
void change_one(addressbooks * index) {
//输入人名
string name;
cout << "please enter the one you want to change: " << endl;
cin >> name;
//先判断有没有这个人
int ret = isExist(index, name);
if(ret == -1)
cout << "this one dose not exist!" << endl;
else
{
//找到联系人,进行修改,输入修改数据
index->personArry[ret].name = name;
cout << "please enter gender: " << endl;
cout << "1--man\n2--woman" << endl;
int gender = 1;
cin >> gender;
index->personArry[ret].gender = gender;
cout << "please enter age: " << endl;
int age = 0;
cin >> age;
index->personArry[ret].age = age;
cout << "please enter phone number: " << endl;
string phone_numbe;
cin >> phone_numbe;
index->personArry[ret].phone_number = phone_numbe;
cout << "please enter address: " << endl;
string address;
cin >> address;
index->personArry[ret].address = address;
cout << "modify complete!" << endl;
}
}
void clear_all(addressbooks* index) { //清空通讯录
index->psize = 0;
cout << "clear done!" << endl; //只需要做逻辑上的清空,等要录入时覆盖掉原数据就好
}