先简单介绍一下这篇文章,这是一篇关于C++的学生管理系统的文章,作为从C语言到C++过渡的项目。
作为一个管理系统,肯定是需要用户使用的,所以,我们应该创建一个菜单函数,用于输出功能菜单,提示用户输入。代码如下:
void menu()
{
cout << "\n 学生信息管理系统\n\n"
<< " *******************************************************************\n\n"
<< "\t\t\t\t 0.退出系统\n\n"
<< "\t\t\t\t 1.录入信息\n\n"
<< "\t\t\t\t 2.浏览信息\n\n"
<< "\t\t\t\t 3.修改信息\n\n"
<< "\t\t\t\t 4.删除信息\n\n"
<< "\t\t\t\t 5.查找信息\n\n"
<< " *******************************************************************\n";
}
用户根据提示,输入数字,我们需要对该数据进行处理,以实现相应功能,这里就用到了switch。
void keydown()
{
int choice;
cin >> choice;
switch (choice)
{
case 0:
exit(0);
break;
case 1:
system("cls");
cout << " ****************************【录入信息】*********************************\n";
inputStudent();
break;
case 2:
system("cls");
cout << " ****************************【浏览信息】*********************************\n";
printStudent();
break;
case 3:
system("cls");
cout << " ****************************【修改信息】*********************************\n";
changeStudent();
break;
case 4:
system("cls");
cout << " ****************************【删除信息】*********************************\n";
deleteStudent();
break;
case 5:
system("cls");
cout << " ****************************【查找信息】*********************************\n";
searchStudent();
break;
default:
cout << " 选择错误,重新输入\n";
system("pause");
break;
}
}
exit(0)可以结束当前程序进程,使程序结束,system("cls")则清除程序界面,使程序清晰明了。在1——5对相应的功能函数进行调用,0——5均为有效数字,default用来阻止非法数字。
下面在介绍1——5的功能函数之前,我们需要先定义一下结构体:
typedef struct
{
string name;
int age;
string sex;
string id;
string phone;
}Student;
list<Student>stulist;//list容器
list<Student>::iterator stu;//定义迭代器stu用来遍历list容器
结构体中用到了string和int数据类型,用于存储姓名、年龄、性别、学号、电话信息,读者可根据自己需求进行更改,list定义了一个Student类型的容器stulist,stu是定义的迭代器,可以理解为指针。下面开始介绍实现功能的函数:
void inputStudent()
{
cout << "\n姓名\t\t年龄\t\t性别\t\t学号\t\t电话" << endl;
Student data;
cin >> data.name >> data.age >> data.sex >> data.id >> data.phone;
stulist.push_back(data);
int select = Select();
loop1:
if (select == 0);
else if (select == 1)
inputStudent();
else
{
cout << "选择错误,请重新输入:\n";
cin >> select;
goto loop1;
}
return;
}
前四行代码没什么要解释的,stulist.push_back(data);这个作用是将刚刚输入的学生信息添加到stulist列表中,考虑到用户在打开一个功能时,应可以自己选择退出该功能返回菜单,还是继续该功能,所以这里使用了Select();
int Select()
{
int select;
cout << "\n请选择: ***********0.返回菜单******************1.继续***************************\n";
cin >> select;
return select;
}
继续解释inputStudent模块,通过Select();进行处理,如果返回值为0,则返回菜单,若是1,则继续,通过对自身函数的调用实现。loop1:则是一个标签。标签是用来标记某一行代码,以便在其他地方通过goto语句跳转到该标签所标记的代码行。这样就实现了用户选择返回还是继续的功能。
void printStudent()
{
cout << "\n姓名\t\t年龄\t\t性别\t\t学号\t\t电话" << endl;
for (stu = stulist.begin(); stu != stulist.end(); stu++)
cout << (*stu).name << "\t\t" << (*stu).age << "\t\t" << (*stu).sex
<< "\t\t" << (*stu).id << "\t" << (*stu).phone << endl;
int select = Select();
loop1:
if (select == 0);
else if (select == 1)
printStudent();
else
{
cout << "选择错误,请重新输入:\n";
cin >> select;
goto loop1;
}
}
前文已经说了,stu可以看做指针,故(*stu)实际指的就是结构体,通过stu的变化,依次打印,loop1:标签的作用和Select()的作用上文已经解释,这里就不再赘述,后文遇到此处也不再解释。
void changeStudent()
{
string str;
bool f = true;
cout << "请输入要修改信息的学生学号\n";
cin >> str;
for (stu = stulist.begin(); stu != stulist.end(); stu++)
if (str == (*stu).id)
{
cout << "请输入希望修改后的学生信息\n";
Student data;
cin >> data.name >> data.age >> data.sex >> data.id >> data.phone;
*stu = data;
cout << "修改成功!\n";
f = !f;
break;
}
if (f)
cout << "该同学信息不存在\n";
int select = Select();
loop1:
if (select == 0);
else if (select == 1)
changeStudent();
else
{
cout << "选择错误,请重新输入:\n";
cin >> select;
goto loop1;
}
}
这段代码的功能是修改学生信息。
首先,代码声明了两个变量,str(一个字符串,用于存储用户输入的学生学号)和f(一个布尔变量,初始值为true)。
然后,代码提示用户输入要修改信息的学生学号,并将输入的学号存储到str变量中。
接下来,代码使用for循环遍历名为stulist的学生列表。在每次循环中,代码检查当前学生的学号是否与输入的学号str相等。如果找到匹配的学生,代码将提示用户输入希望修改后的学生信息,并使用cin语句读取输入的数据。
然后,代码创建一个名为data的Student类型变量,并将读取的数据存储到该变量的相应属性中。接着,代码使用解引用运算符*将当前学生的指针指向新创建的data变量,从而将新数据替换学生的原始数据。
然后,代码输出一条消息表示修改成功,并将f变量的值取反(即从true变为false)。
最后,如果循环结束后f变量的值为true(即没有找到匹配的学生),则代码输出一条消息表示该同学信息不存在。
总体来说,这段代码通过遍历学生列表并比较学号来查找要修改的学生信息。如果找到了匹配的学生,它将提示用户输入新的学生信息,并将其替换学生的原始数据。如果未找到匹配的学生,它将输出一条相应的消息。
void deleteStudent()
{
string str;
bool f = true;
cout << "请输入要删除信息的学生学号\n";
cin >> str;
for (stu = stulist.begin(); stu != stulist.end(); stu++)
if (str == (*stu).id)
{
stulist.erase(stu);
cout << "删除成功!\n";
f = !f;
break;
}
if (f)
cout << "该同学信息不存在\n";
int select = Select();
loop1:
if (select == 0);
else if (select == 1)
deleteStudent();
else
{
cout << "选择错误,请重新输入:\n";
cin >> select;
goto loop1;
}
}
这个模块的代码和上面的代码实现原理异曲同工,不同的上面的是要改变,这里需要删除,所以这里不再解释原理,后面的searchStudent亦是如此。
void searchStudent()
{
string str;
bool f = true;
cout << "请输入要修改信息的学生学号\n";
cin >> str;
for (stu = stulist.begin(); stu != stulist.end(); stu++)
if (str == (*stu).id)
{
cout << "\n姓名\t\t年龄\t\t性别\t\t学号\t\t电话" << endl;
cout << (*stu).name << "\t\t" << (*stu).age << "\t\t" << (*stu).sex
<< "\t\t" << (*stu).id << "\t" << (*stu).phone << endl;
f = !f;
break;
}
if (f)
cout << "该同学信息不存在\n";
int select = Select();
loop1:
if (select == 0);
else if (select == 1)
searchStudent();
else
{
cout << "选择错误,请重新输入:\n";
cin >> select;
goto loop1;
}
}
上面的代码使得管理系统的功能得以实现,现在编辑一个main函数,程序就可以运行了。
int main()
{
system("color F0");
while (1)
{
system("cls");
menu();
keydown();
}
system("pause");
return 0;
}
使用while使得程序可以循环,不然运行一次就结束了,功能肯定和预期不符。
以上就是C++的学生管理系统全部代码实现过程了,感谢阅读。
另:该程序的完整代码可在github上下载使用:https://github.com/1mohen1/project1.git