整体代码展示:借鉴作业的同学可以直接复制粘贴ctrlACV一气呵成,代码可以直接运行。如果怕和同学的重复了再改下参数名就可以,不过记得先备份一份哦。 如果觉得对你们有用还请不要忘记一键三连哟。ヾ(≧▽≦*)o
#include <iostream>
#include <fstream> //写文件
#include <string> //字符串操作length()
#include <windows.h>//画颜色
#include <conio.h> //调用getch(),从控制台读取,但不会显示
using namespace std;
int n=0;//初始化,后面采用
class Student
{
public:
/*--------------------------初始化参数-----------------------------*/
string name;
string num;
string sex;
char cclass[20];
string age;
string lisan;
/*--------------------------输入函数-----------------------------*/
void input()
{
cout<<"\t请输入姓名:"; cin>>name;
cout<<"\t请输入学号:"; cin>>num;
cout<<"\t请输入性别:"; cin>>sex;
cout<<"\t请输入班级:"; cin>>cclass;
cout<<"\t请输入年龄:"; cin>>age;
cout<<"\t请输入备注:"; cin>>lisan;
}
/*------------------------------show函数------------------------*/
void show()
{
cout<<name<<"\t"<<num<<"\t"<<sex<<"\t"<<cclass<<"\t"<<age<<"\t"<<lisan<<endl;
}
};
/*------------------------------创建类------------------------------*/
class Message
{
public:
Message(){};
~Message(){};//析构函数
Student stu[20];
void menu();//展示菜单
void add();// 增加
void display();
/****************初始化查找函数里面的各类查找方法********************/
int sname(string x);
int snum(string y);
//因为性别和年龄的不唯一性,我们采用字符串方式逐个记录相同属性同学的学号
string ssex(string w);
string sage(string z);
/****************菜单具体操作********************/
void find();// 查找
void change();// 修改
void dele();// 删除
void save();// 保存
};
/*------------------------------菜单------------------------------*/
void Message::menu()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//设置绿色和蓝色相加
cout<<"欢迎来到我们的班级管理系统!!!\n诚邀各校有志之士加入我们的代码学习群交流:871352155\n"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |
FOREGROUND_GREEN);//设置红色和绿色相加
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n";
cout<<"☆********************************************************************★\n";
cout<<"★ 班级信息管理系统 ☆\n";
cout<<"☆ ★\n";
cout<<"★ 1.增加信息 4.查找信息 ☆\n";
cout<<"☆ ★\n";
cout<<"★ 2.显示信息 5.删除信息 ☆\n";
cout<<"☆ ★\n";
cout<<"★ 3.更改信息 6.保存信息 ☆\n";
cout<<"☆********************************************************************★\n";
cout<<"★ 7.退出系统 ☆\n";
cout<<"☆ ------------------------------------------- ★\n";
cout<<"☆********************************************************************★\n";
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n"<<endl;
}
/*------------------------------添加数据------------------------------*/
void Message::add()
{
stu[n++].input();
cout<<"添加成功!输入任意字符继续:";
getch();
}
/*------------------------------显示数据------------------------------*/
void Message::display()
{
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
for(int x=0;x<n;x++)
stu[x].show();
cout<<"输入任意字符继续:";
getch();
}
/*------------------------------查找函数------------------------------*/
/*------------------------根据四种条件分类查询------------------------*/
int Message::sname(string na) // 名字查
{
int i;
for(i=0;i<n;i++)
{
if(stu[i].name==na)
return i;
}
return -1;
}
int Message::snum(string nu) // 学号查
{
int i;
for(i=0;i<n;i++)
{
if(stu[i].num==nu)
return i;
}
return -1;
}
string Message::ssex(string nu) // 性别查(有个小问题)
{
int i;
string number;
for(i=0;i<n;i++)
{
if(stu[i].sex==nu)
{
number+=("%d",i);//占位符储存相同性别人的信息 "0235689" "136"
}
}
return number;
}
string Message::sage(string nu) //年龄差 (同上的问题)
{
int i;
string number;
for(i=0;i<n;i++)
{
if(stu[i].age==nu)
{
number+=("%d",i);
}
}
return number;
}
void Message::find()
{
//初始化在查找中的数据
int a;
int z;
string b;
string ap,bp,cp,dp;
cout<<"请选择查找方式:1.按学号查找"<<endl;
cout<<" 2.按姓名查找"<<endl;
cout<<" 3.按性别查找"<<endl;
cout<<" 4.按年龄查找"<<endl;
cout<<"请输入1、2、3、4:";
//根据输入值判断使用何种查找方式
cin>>a;
switch(a)
{
case 1:{
cout<<"请输入需查找学生的学号:";
cin>>bp;
z=snum(bp);
if(z!=-1)
{
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
stu[z].show();
}
else
cout<<"没有找到该学生"<<endl;
cout<<"输入任意字符继续"<<endl;
getch();
break;
}
case 2:{
cout<<"请输入需查找学生的姓名:";
cin>>ap;
z=sname(ap);
if(z!=-1)
{
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
stu[z].show();
}
else
cout<<"没有找到该学生"<<endl;
cout<<"输入任意字符继续"<<endl;
getch();
break;
}
case 3:{
cout<<"请输入需查找学生的性别:";
cin>>cp;
b=ssex(cp);
if(b.length()>0)
{
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
for(int i=0;i<b.length();i++)
{
stu[b[i]].show();
}
}
else
cout<<"没有找到该学生"<<endl;
cout<<"输入任意字符继续"<<endl;
getch();
break;
}
case 4:{
cout<<"请输入需查找学生的年龄:";
cin>>dp;
b=sage(dp);
if(b.length()>0)
{
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
for(int i=0;i<b.length();i++)
{
stu[b[i]].show();
}
}
else
cout<<"没有找到该学生"<<endl;
cout<<"输入任意字符继续"<<endl;
getch();
break;
}
}
}
/*------------------------------更改数据------------------------------*/
void Message::change()
{
int password;
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆请 输 入 密 码 登 录 系 统!★☆★☆★☆★☆★☆★☆★☆★☆"<<endl;
cin>>password;
if(password==123456)
{
int k;
string cp;
cout<<"请输入需修改学生学号:";
cin>>cp;
k=snum(cp);
if(k!=-1)
{
//设置蓝色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"该生原信息"<<endl ;
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
cout<<stu[k].name<<"\t"<<stu[k].num<<"\t"<<stu[k].sex<<"\t"<<stu[k].cclass<<"\t"<<stu[k].age<<"\t"<<stu[k].lisan<<endl;
//设置红色和绿色相加
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);
cout<<"已找到,请输入新的信息。"<<endl;
stu[k].input();
}
else
cout<<"没有该生信息"<<endl;
cout<<"输入任意字符继续:";
getch();
}
else{
cout<<"密码错误无法修改"<<endl;
getch();
}
}
/*------------------------------删除数据------------------------------*/
void Message::dele()
{
int y;
string dp;
cout<<"请输入要删除学生的学号:";
cin>>dp;
y=snum(dp);
if(y!=-1)
{
for(;y<n;y++)
{
stu[y].name=stu[y+1].name;
stu[y].num=stu[y+1].num;
strcpy(stu[y].cclass,stu[y+1].cclass);
stu[y].lisan=stu[y+1].lisan;
stu[y].age=stu[y+1].age;
}
n--;
}
else
cout<<"输入错误,找不到该生信息"<<endl;
cout<<"输入任意字符继续";
getch();
}
/*------------------------------保存数据------------------------------*/
void Message::save()
{
ofstream ofs;
// 指定路径和打开方式
ofs.open("text.txt", ios::out);
// 写内容
ofs<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
for(int x=0;x<n;x++)
{
ofs<<stu[x].name<<"\t"<<stu[x].num<<"\t"<<stu[x].sex<<"\t"<<stu[x].cclass<<"\t"<<stu[x].age<<"\t"<<stu[x].lisan<<endl;
}
// 5 关闭文件
ofs.close();
cout<<"输入任意字符继续:";
getch();
}
/*------------------------------主函数------------------------------*/
int main()
{
int password;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);//设置绿色和蓝色相加
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆请 输 入 密 码 登 录 系 统!★☆★☆★☆★☆★☆★☆★☆★☆"<<endl;
cin>>password;
if(password==123456)
{
char menu[] = {
"欢迎来到我们的班级管理系统!!!\n诚邀各地有志之士加入我们的代码学习群交流:871352155\n"
};
int i;
for(i = 0; menu[i] != '\0'; i++)
{
Sleep(30);
cout<<menu[i];
}
int y;
string ss="y";
Message h;
do
{
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);//设置绿色和蓝色相加
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆欢 迎 进 入 班 级 信 息 管 理 系 统!★☆★☆★☆★☆★☆★☆★☆★☆"<<endl;
h.menu();
cout<<"请输入相应的阿拉伯数字:";
cin>>y;
switch(y)
{
case 1:h.add(); break;
case 2:h.display();break;
case 3:h.change(); break;
case 4:h.find(); break;
case 5:h.dele(); break;
case 6:h.save(); break;
case 7:ss="n"; break;
}
}
while(ss=="y");
return 0;
}
else
{
cout<<"密码错误!!!"<<endl;
}
}
前言
我们诚邀各校有志之士加入我们的代码学习群交流:**871352155**(无论你会C/C++还是Java,Python还是PHP......有兴趣我们都欢迎你的加入,不过还请各位认真填写加群信息。群内目前多为大学生,打广告的先生女士就请不要步足了。我们希望有远见卓识的前辈能为即将步入社会的初犊提出建议指引方向。)
下载链接https://download.csdn.net/download/weixin_43341045/12522379
还有一个C++课程设计关于通讯录的https://blog.csdn.net/weixin_43341045/article/details/106746016
课设要求
对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。功能要求:
(1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、年龄、备注。
(2)本系统显示这样的菜单:请选择系统功能项:
a学生基本信息录入
b学生基本信息显示
c学生基本信息保存
d学生基本信息删除
e学生基本信息修改(要求先输入密码)
f学生基本信息查询
l按学号查询
l按姓名查询
l按性别查询
l按年龄查询
g 退出系统
(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生基本信息保存到文件中。
(5)进入系统之前要先输入密码。
效果图
说几个特别重点的地方
登录界面
登录的话其实和JavaScript差不多就是说简单的一个密码判断,想要增加一个MD5加密也不是不行。
menu数组和延时函数Sleep0.03s的设置是为了来点花里胡哨的逐字打印的效果,看起来还是比较好看的。
int password;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);//设置绿色和蓝色相加
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆请 输 入 密 码 登 录 系 统!★☆★☆★☆★☆★☆★☆★☆★☆"<<endl;
cin>>password;
if(password==123456)
{
char menu[] = {
"欢迎来到我们的班级管理系统!!!\n诚邀各地有志之士加入我们的代码学习群交流:871352155\n"
};
int i;
for(i = 0; menu[i] != '\0'; i++)
{
Sleep(30);
cout<<menu[i];
}
主菜单
/*------------------------------菜单------------------------------*/
void Message::menu()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//设置绿色和蓝色相加
cout<<"欢迎来到我们的班级管理系统!!!\n诚邀各校有志之士加入我们的代码学习群交流:871352155\n"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |
FOREGROUND_GREEN);//设置红色和绿色相加
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n";
cout<<"☆********************************************************************★\n";
cout<<"★ 班级信息管理系统 ☆\n";
cout<<"☆ ★\n";
cout<<"★ 1.增加信息 4.查找信息 ☆\n";
cout<<"☆ ★\n";
cout<<"★ 2.显示信息 5.删除信息 ☆\n";
cout<<"☆ ★\n";
cout<<"★ 3.更改信息 6.保存信息 ☆\n";
cout<<"☆********************************************************************★\n";
cout<<"★ 7.退出系统 ☆\n";
cout<<"☆ ------------------------------------------- ★\n";
cout<<"☆********************************************************************★\n";
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n"<<endl;
}
初始化关于学生的结构体,就相当于数据库的操作了吧,把每个信息存入到你写好的结构中,show函数是为了后面方便显示提前设置好。
int n=0;//初始化,后面采用
class Student
{
public:
/*--------------------------初始化参数-----------------------------*/
string name;
string num;
string sex;
char cclass[20];
string age;
string mesage;
/*--------------------------输入函数-----------------------------*/
void input()
{
cout<<"\t请输入姓名:"; cin>>name;
cout<<"\t请输入学号:"; cin>>num;
cout<<"\t请输入性别:"; cin>>sex;
cout<<"\t请输入班级:"; cin>>cclass;
cout<<"\t请输入年龄:"; cin>>age;
cout<<"\t请输入备注:"; cin>>mesage;
}
/*------------------------------show函数------------------------*/
void show()
{
cout<<name<<"\t"<<num<<"\t"<<sex<<"\t"<<cclass<<"\t"<<age<<"\t"<<mesage<<endl;
}
};
查询界面
void Message::display()
{
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
for(int x=0;x<n;x++)
stu[x].show();
cout<<"输入任意字符继续:";
getch();
}
修改界面
题目中有个要求,要先输入密码才可以进行修改信息,无所谓就是加一个pwd嘛。
在修改界面这里其实还可以再多优化一下,但是因为时间原因(毕竟是期末周了)就做了一个可以在修改的时候查看原信息的效果,方便用户看着原信息修改,这样的话其实对于用户来说并不人性化,所有数据无论想改还是不改都要重新输入一次。其实合理点的话,应该是一个三目判断,看用户想改那一部分才修改。
/*------------------------------更改数据------------------------------*/
void Message::change()
{
int password;
cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆请 输 入 密 码 登 录 系 统!★☆★☆★☆★☆★☆★☆★☆★☆"<<endl;
cin>>password;
if(password==123456)
{
int k;
string cp;
cout<<"请输入需修改学生学号:";
cin>>cp;
k=snum(cp);
if(k!=-1)
{
//设置蓝色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout<<"该生原信息"<<endl ;
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
cout<<stu[k].name<<"\t"<<stu[k].num<<"\t"<<stu[k].sex<<"\t"<<stu[k].cclass<<"\t"<<stu[k].age<<"\t"<<stu[k].lisan<<endl;
//设置红色和绿色相加
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);
cout<<"已找到,请输入新的信息。"<<endl;
stu[k].input();
}
else
cout<<"没有该生信息"<<endl;
cout<<"输入任意字符继续:";
getch();
}
else{
cout<<"密码错误无法修改"<<endl;
getch();
}
}
修改界面
查询界面有四种查询方法,我们抛开姓名相同的情况和学号。年龄和性别往往是有相同的,我们这里挑性别来说,用户输入性别之后开始调用之前写好的ssex()函数,用来梳理数据。我们采用字符串不断增长的方法,类似于数组操作。因为这里字符串操作更方便,也不需要更多栈队列操作。
string Message::ssex(string nu) // 性别查(有个小问题)
{
int i;
string number;
for(i=0;i<n;i++)
{
if(stu[i].sex==nu)
{
number+=("%d",i);//占位符储存相同性别人的信息 "0235689" "136"
}
}
return number;
}
case 3:{
cout<<"请输入需查找学生的性别:";
cin>>cp;
b=ssex(cp);
if(b.length()>0)
{
cout<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
for(int i=0;i<b.length();i++)
{
stu[b[i]].show();
}
}
else
cout<<"没有找到该学生"<<endl;
cout<<"输入任意字符继续"<<endl;
getch();
break;
}
保存数据
事先在c++文件同目录根下把text.txt创建出来,当然你也可以用c++写出来。
在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作。
/*------------------------------保存数据------------------------------*/
void Message::save()
{
ofstream ofs;
// 指定路径和打开方式
ofs.open("text.txt", ios::out);
// 写内容
ofs<<"姓名\t学号\t性别\t班级\t\t年龄\t备注"<<endl;
for(int x=0;x<n;x++)
{
ofs<<stu[x].name<<"\t"<<stu[x].num<<"\t"<<stu[x].sex<<"\t"<<stu[x].cclass<<"\t"<<stu[x].age<<"\t"<<stu[x].mesage<<endl;
}
// 5 关闭文件
ofs.close();
cout<<"输入任意字符继续:";
getch();