跟着网上学习了c++,写出了一个简单的学生信息管理系统,实现对学生的增删改查以及清空学生列表的功能。
一、创建结构体
struct student
{
string stuId;//学号
string name;//姓名
string sex;//性别
int age;//年龄
};
struct stu_class {
struct student students [MAX];//一个班MAX人
int number;//当前数量
};
创建了两个结构体,student结构体用来存放学号,姓名,性别,年龄等信息;stu_class代表一个班,students数组存放学生,number代表当前的学生数量
二、显示菜单
void showMenu(){
cout << "--------------------" << endl;
cout << "-----1.添加学生-----" << endl;
cout << "-----2.删除学生-----" << endl;
cout << "-----3.修改学生-----" << endl;
cout << "-----4.查找学生-----" << endl;
cout << "-----5.显示学生-----" << endl;
cout << "-----6.清空学生-----" << endl;
cout << "-----0.退出系统-----" << endl;
cout << "--------------------" << endl;
}
用cout输出
三、添加学生
void addStudent(stu_class * a) {
if (a->number > MAX) {
cout << "添加失败,学生已满!" << endl;
}
else {
//添加学号
string id;
cout << "请输入要添加学生的学号:" << endl;
cin >> id;
a->students[a->number].stuId = id;
//添加姓名
string name;
cout << "请输入要添加学生的姓名:" << endl;
cin >> name;
a->students[a->number].name = name;
//添加性别
string sex;
cout << "请输入要添加学生的性别:" << endl;
while (true)
{
cin >> sex;
if (sex == "男" || sex == "女") {
break;
}
else {
cout << "性别输入有误!" << endl;
cout << "请重新输入:" << endl;
}
}
a->students[a->number].sex = sex;
//添加年龄
int age;
cout << "请输入学生的年龄:" << endl;
while (true)
{
cin >> age;
if (age >= 0 && age <= 100) { //规定年龄在0--100岁
break;
}
else {
cout << "年龄输入有误!" << endl;
cout << "请重新输入:" << endl;
}
}
a->students[a->number].age = age;
}
cout << "添加成功!" << endl;
a->number++;
system("pause");
system("cls");
}
通过地址传递,用cin输入存放在第number个student数组中,性别只能输入男或女,年龄规定为0到100岁
四、显示学生
void showStudent(stu_class * b) {
if (b->number == 0) {
cout << "无法显示,没有学生!" << endl;
}
else {
int i;
for (i = 0; i <= b->number - 1; i++) {
cout << "学号:" << b->students[i].stuId << "\t";
cout << "姓名:" << b->students[i].name << "\t";
cout << "性别:" << b->students[i].sex << "\t";
cout << "年龄:" << b->students[i].age << endl;
}
}
system("pause");
system("cls");
}
如果还未添加学生,显示"无法显示,没有学生!",添加了之后,通过遍历student数组,将相关信息输出
五、检测学生是否存在
int detectStudent(stu_class * c , string name){
int i;
for (i = 0; i <= c->number - 1; i++) {
if (c->students[i].name == name) {
return i;
}
}
return -1;
}
检测学生是否存在,后面的删除修改查找功能以此为基础,如果学生不存在,返回-1,存在的话返回当前数组下标
六、其他功能
1、主函数
int main() {
stu_class sc;
sc.number = 0;
int select;
while (true)
{
showMenu();
cout << "请输入您的操作:" << endl;
cin >> select;
switch (select)
{
case 0:
cout << "感谢您的使用!" << endl;
system("pause");
return 0;
break;
case 1:
addStudent(&sc);
break;
case 2:
{ string name;
cout << "请输入要删除学生的姓名:" << endl;
cin >> name;
int record = detectStudent(&sc, name);
deleteStudent(&sc, record);
}
break;
case 3:
{ string name;
cout << "请输入要修改学生的姓名:" << endl;
cin >> name;
int record = detectStudent(&sc, name);
updateStudent(&sc, record);
}
break;
case 4:
{ string name;
cout << "请输入要查找学生的姓名:" << endl;
cin >> name;
int record = detectStudent(&sc, name);
findStudent(&sc, record);
}
break;
case 5:
showStudent(&sc);
break;
case 6:
cleanStudent(&sc);
break;
default:
break;
}
}
system("pause");
return 0;
}
删改查的功能,先输入姓名,调用detectStudent函数,检测学生是否存在和学生存在哪里,用变量record记录detectStudent的返回值
2、删除学生
void deleteStudent(stu_class* d, int record) {
int i;
if (record == -1) {
cout << "未找到此学生。" << endl;
}
else
{
for (i = record; i <= d->number - 1; i++) {
d->students[i].stuId = d->students[i + 1].stuId;
d->students[i].name = d->students[i + 1].name;
d->students[i].sex = d->students[i + 1].sex;
d->students[i].age = d->students[i + 1].age;
}
d->number--;
cout << "删除成功!" << endl;
}
system("pause");
system("cls");
}
先判断是否存在,然后根据record把要删除的用后一个覆盖
3、修改学生
void updateStudent(stu_class * e, int record) {
if (record == -1) {
cout << "未找到此学生。" << endl;
}
else {
//修改学号
string id;
cout << "请重新输入学号:" << endl;
cin >> id;
e->students[record].stuId = id;
//修改性别
string sex;
cout << "请重新输入性别:" << endl;
cin >> sex;
e->students[record].sex = sex;
//修改年龄
int age;
cout << "请重新输入年龄:" << endl;
cin >> age;
e->students[record].age = age;
cout << "修改成功!" << endl;
}
system("pause");
system("cls");
}
修改我没有限制年龄和性别,cin输入覆盖原来的信息
4、查找学生
void findStudent(stu_class* f, int record) {
if (record == -1) {
cout << "未找到此学生。" << endl;
}
else{
cout << "学号:" << f->students[record].stuId << "\t";
cout << "姓名:" << f->students[record].name << "\t";
cout << "性别:" << f->students[record].sex << "\t";
cout << "年龄:" << f->students[record].age << endl;
}
system("pause");
system("cls");
}
根据record的值,cout输出相应的信息
5、清空
void cleanStudent(stu_class * g){
g->number = 0;
cout << "清空完成!" << endl;
system("pause");
system("cls");
}
将number的值重置为0实现清空操作
七、完整代码
#include <iostream>
using namespace std;
#define MAX 100
//学生结构体
struct student
{
string stuId;//学号
string name;//姓名
string sex;//性别
int age;//年龄
};
struct stu_class {
struct student students [MAX];//一个班MAX人
int number;//当前数量
};
//1.显示菜单
void showMenu(){
cout << "--------------------" << endl;
cout << "-----1.添加学生-----" << endl;
cout << "-----2.删除学生-----" << endl;
cout << "-----3.修改学生-----" << endl;
cout << "-----4.查找学生-----" << endl;
cout << "-----5.显示学生-----" << endl;
cout << "-----6.清空学生-----" << endl;
cout << "-----0.退出系统-----" << endl;
cout << "--------------------" << endl;
}
//2. 添加学生
void addStudent(stu_class * a) {
if (a->number > MAX) {
cout << "添加失败,学生已满!" << endl;
}
else {
//添加学号
string id;
cout << "请输入要添加学生的学号:" << endl;
cin >> id;
a->students[a->number].stuId = id;
//添加姓名
string name;
cout << "请输入要添加学生的姓名:" << endl;
cin >> name;
a->students[a->number].name = name;
//添加性别
string sex;
cout << "请输入要添加学生的性别:" << endl;
while (true)
{
cin >> sex;
if (sex == "男" || sex == "女") {
break;
}
else {
cout << "性别输入有误!" << endl;
cout << "请重新输入:" << endl;
}
}
a->students[a->number].sex = sex;
//添加年龄
int age;
cout << "请输入学生的年龄:" << endl;
while (true)
{
cin >> age;
if (age >= 0 && age <= 100) { //规定年龄在0--100岁
break;
}
else {
cout << "年龄输入有误!" << endl;
cout << "请重新输入:" << endl;
}
}
a->students[a->number].age = age;
}
cout << "添加成功!" << endl;
a->number++;
system("pause");
system("cls");
}
//3.显示学生
void showStudent(stu_class * b) {
if (b->number == 0) {
cout << "无法显示,没有学生!" << endl;
}
else {
int i;
for (i = 0; i <= b->number - 1; i++) {
cout << "学号:" << b->students[i].stuId << "\t";
cout << "姓名:" << b->students[i].name << "\t";
cout << "性别:" << b->students[i].sex << "\t";
cout << "年龄:" << b->students[i].age << endl;
}
}
system("pause");
system("cls");
}
//4.根据姓名检测学生是否存在,不存在返回-1
int detectStudent(stu_class * c , string name){
int i;
for (i = 0; i <= c->number - 1; i++) {
if (c->students[i].name == name) {
return i;
}
}
return -1;
}
//5.删除学生
void deleteStudent(stu_class* d, int record) {
int i;
if (record == -1) {
cout << "未找到此学生。" << endl;
}
else
{
for (i = record; i <= d->number - 1; i++) {
d->students[i].stuId = d->students[i + 1].stuId;
d->students[i].name = d->students[i + 1].name;
d->students[i].sex = d->students[i + 1].sex;
d->students[i].age = d->students[i + 1].age;
}
d->number--;
cout << "删除成功!" << endl;
}
system("pause");
system("cls");
}
//6.修改学生信息
void updateStudent(stu_class * e, int record) {
if (record == -1) {
cout << "未找到此学生。" << endl;
}
else {
//修改学号
string id;
cout << "请重新输入学号:" << endl;
cin >> id;
e->students[record].stuId = id;
//修改性别
string sex;
cout << "请重新输入性别:" << endl;
cin >> sex;
e->students[record].sex = sex;
//修改年龄
int age;
cout << "请重新输入年龄:" << endl;
cin >> age;
e->students[record].age = age;
cout << "修改成功!" << endl;
}
system("pause");
system("cls");
}
//7.查找学生
void findStudent(stu_class* f, int record) {
if (record == -1) {
cout << "未找到此学生。" << endl;
}
else{
cout << "学号:" << f->students[record].stuId << "\t";
cout << "姓名:" << f->students[record].name << "\t";
cout << "性别:" << f->students[record].sex << "\t";
cout << "年龄:" << f->students[record].age << endl;
}
system("pause");
system("cls");
}
//8.学生清空
void cleanStudent(stu_class * g){
g->number = 0;
cout << "清空完成!" << endl;
system("pause");
system("cls");
}
int main() {
stu_class sc;
sc.number = 0;
int select;
while (true)
{
showMenu();
cout << "请输入您的操作:" << endl;
cin >> select;
switch (select)
{
case 0:
cout << "感谢您的使用!" << endl;
system("pause");
return 0;
break;
case 1:
addStudent(&sc);
break;
case 2:
{ string name;
cout << "请输入要删除学生的姓名:" << endl;
cin >> name;
int record = detectStudent(&sc, name);
deleteStudent(&sc, record);
}
break;
case 3:
{ string name;
cout << "请输入要修改学生的姓名:" << endl;
cin >> name;
int record = detectStudent(&sc, name);
updateStudent(&sc, record);
}
break;
case 4:
{ string name;
cout << "请输入要查找学生的姓名:" << endl;
cin >> name;
int record = detectStudent(&sc, name);
findStudent(&sc, record);
}
break;
case 5:
showStudent(&sc);
break;
case 6:
cleanStudent(&sc);
break;
default:
break;
}
}
system("pause");
return 0;
}