前言
大致功能概况
具体代码实现
登录学生系统模块
创建学生信息模块
显示学生信息模块
保存学生信息模块
读取学生信息模块
增添学生信息模块
删除学生信息模块
查找学生信息模块
修改学生信息模块
插入学生信息模块
学生成绩排序模块
前言
前面已经学了C++的类和对象,对C++已经有了初步了解,为了加深对其应用,下面和大家一起学习编写学生信息管理系统。
大致功能概况
学生信息管理系统功能函数:
- void menu();//主菜单
- void CreatStuInfo();//创建学生信息
- void GetStuFile();//将学生信息写入文件
- void ShowStu();//显示全部学生信息
- void PutStuFile();//将学生信息显示在终端上
- void AddStu();//增加学生信息
- void DeleteStu();//删除学生信息
- void FindStu();//查找学生信息
- void ModifyStu();//修改学生信息
- void InsertStu();//插入学生信息
- //void CountStu();//统计学生信息
- void SortStu();//按照学生成绩排序
单链表结点定义
struct Student_Node {
int num; //学号
int age; //年龄
char name[20];//姓名
char sex[10]; //性别
char major[10];//专业
char born[10]; //出生日期
char address[20];//家庭住址
int Math; //数学成绩
struct Student_Node* next;//指针域
};
学生类
class Student
{
public:
Student()
{
head = new Student_Node;
head->next = NULL;
}
void menu();//主菜单
void CreatStuInfo();//创建学生信息
void GetStuFile();//将学生信息写入文件
void ShowStu();//显示全部学生信息
void PutStuFile();//将学生信息显示在终端上
void AddStu();//增加学生信息
void DeleteStu();//删除学生信息
void FindStu();//查找学生信息
void ModifyStu();//修改学生信息
void InsertStu();//插入学生信息
//void CountStu();//统计学生信息
void SortStu();//按照学生成绩排序
private:
struct Student_Node* head;
};
具体代码实现
登录学生系统模块
首先看运行结果:这里登录系统做的有点草率,大家可以限制登录次数或者已经有的账号,不允许再次注册等约束条件。
代码示例:
//首页
void start_page()
{
cout << "\t\t\t\t|------------------------------------|" << endl;
cout << "\t\t\t\t|------------------------------------|" << endl;
cout << "\t\t\t\t|------------------------------------|" << endl;
cout << "\t\t\t\t|------------------------------------|" << endl;
cout << "\t\t\t\t|------欢迎使用学生信息管理系统--------|" << endl;
cout << "\t\t\t\t|------------------------------------|" << endl;
cout << "\t\t\t\t|------------------------------------|" << endl;
cout << "\t\t\t\t|------------------------------------|" << endl;
cout << "\t\t\t\t|------------------------------------|" << endl;
cout << "\t\t\t\t请按Enter进行下一步!!!" << endl << "\t\t\t\t";
getchar();//停顿便于观察
system("cls");//刷新界面
}
//登录注册界面
void login()
{
char username[20], password[10];
cout << "\t\t\t\t欢迎您进入学生基本信息管理软件的注册界面!" << endl << endl;
cout << "\t\t\t\t【0】我已经注册过了!" << endl << endl;
cout << "\t\t\t\t【1】未注册,现在注册!" << endl << endl;
cout << "\t\t\t\t请按Entet键继续......";
getchar();
int i;
cout << "\t\t\t\t" << "请输入......";
cin >> i;
if (i == 1)
{
cout << "\t\t\t\t" << "欢迎新用户注册!" << endl << endl;
cout << "\t\t\t\t" << "请输入您的用户名:";
cin >> username;
cout << "\t\t\t\t" << "请输入您的密码:";
cin >> password;
system("pause");
system("cls");
ofstream regist(".login.txt");
regist << username;
regist << password;
regist.close();
cout << "注册成功!" << endl;
getchar();
system("cls");
}
cout << "\t\t\t\t" << "请输入您的用户名:";
cin >> username;
cout << "\t\t\t\t" << "请输入您的密码:";
cin >> password;
char str[20];
FILE* fp = fopen(".login.txt", "r");
if (!fp)
{
cout << "打开失败" << endl;
return;
}
while (fgets(str, 20, fp))
{
}
fclose(fp);
if (strcmp(strcat(username, password), str) == 0)
{
cout << "登录成功";//登录成功后,在这里添加主菜单
//main_function();
}
else {
cout << "\t\t\t\t账号或密码错误,请输入正确的账号和密码!!!" << endl;
}
getchar();
//system("cls");
}
创建学生信息模块
运行结果示例:很明显发现年龄与出生日期不符合等与实际不符合问题,大家可以根据需求去添加一些必要的约束条件。
代码如下:文章来源地址https://www.toymoban.com/news/detail-502071.html
//创建学生信息
void Student::CreatStuInfo()
{
cout << "\t\t\t\t请输入您要创建的学生的数量:" << endl << "\t\t\t\t";
int i;
cin >> i;
struct Student_Node* p1 = head;
struct Student_Node* p2;
for (int j = 1; j < i + 1; j++)
{
p2 = new Student_Node;
cout << "\t\t\t\t请输入第" << j << "个学生的学号:" << endl << "\t\t\t\t";
cin >> p2->num;
cout << "\t\t\t\t请输入第" << j << "个学生的年龄:" << endl << "\t\t\t\t";
cin >> p2->age;
cout << "\t\t\t\t请输入第" << j << "个学生的姓名:" << endl << "\t\t\t\t";
cin >> p2->name;
cout << "\t\t\t\t请输入第" << j << "个学生的性别:" << endl << "\t\t\t\t";
cin >> p2->sex;
cout << "\t\t\t\t请输入第" << j << "个学生的专业:" << endl << "\t\t\t\t";
cin >> p2->major;
cout << "\t\t\t\t请输入第" << j << "个学生的出生日期:" << endl << "\t\t\t\t";
cin >> p2->born;
cout << "\t\t\t\t请输入第" << j << "个学生的家庭地址:" << endl << "\t\t\t\t";
cin >> p2->address;
cout << "\t\t\t\t请输入第" << j << "个学生的数学成绩:" << endl << "\t\t\t\t";
cin >> p2->Math;
p2->next = NULL;
p1->next = p2;
p1 = p2;
}
getchar();
}
//主菜单
void Student::menu()
{
cout << "\t\t\t\t------------------------------------" << endl;
cout << "\t\t\t\t| 主菜单 |" << endl;
cout << "\t\t\t\t| 【1】创建学生的信息 |" << endl;
cout << "\t\t\t\t| 【2】显示学生的信息 |" << endl;
cout << "\t\t\t\t| 【3】将录入的学生信息进行保存 |" << endl;
cout << "\t\t\t\t| 【4】将所保存的学生的信息进行读取 |" << endl;
cout << "\t\t\t\t| 【5】增添学生的信息 |" << endl;
cout << "\t\t\t\t| 【6】删除学生的信息 |" << endl;
cout << "\t\t\t\t| 【7】查找学生的信息 |" << endl;
cout << "\t\t\t\t| 【8】修改学生的信息 |" << endl;
cout << "\t\t\t\t| 【9】插入学生的信息 |" << endl;
cout << "\t\t\t\t| 【10】统计学生的信息 |" << endl;
cout << "\t\t\t\t| 【11】退出学生基本信息管理软件 |" << endl;
cout << "\t\t\t\t| 【12】 按照学生的数学成绩进行排序 |" << endl;
cout << "\t\t\t\t------------------------------------|" << endl;
cout << "\t\t\t\t请输入您的选择:" << endl << "\t\t\t\t";
}
显示学生信息模块
运行结果示例
代码如下:
//显示全部学生成绩
void Student::ShowStu()
{
struct Student_Node* p1 = head->next;
int i = 1;
if (p1 == nullptr)
{
i = 0;
}
if (i == 0)
{
cout << "\t\t\t\t没有找到学生的信息!!!" << endl;
}
if (i == 1)
{
while (p1)
{
cout << endl;
cout << "学生的学号:\t\t\t" << p1->num << endl;
cout << "学生的年龄:\t\t\t" << p1->age << endl;
cout << "学生的姓名:\t\t\t" << p1->name << endl;
cout << "学生的性别:\t\t\t" << p1->sex << endl;
cout << "学生的专业:\t\t\t" << p1->major << endl;
cout << "学生的出生日期:\t\t\t" << p1->born << endl;
cout << "学生的家庭住址:\t\t\t" << p1->address << endl;
cout << "学生的英语成绩:\t\t\t" << p1->Math;
p1 = p1->next;
}
}
getchar();
}
保存学生信息模块
运行结果示例:
在对应的路径下,可以找到创建的记事本
代码如下:
//将学生信息写入文件中
void Student::GetStuFile()
{
ofstream outfile(".studentlist.txt");
if (!outfile)
{
cout << "打开文件失败!\n" << endl;
}
struct Student_Node* p1 = head->next;
while (p1)
{
outfile << "学号:" << p1->num << endl;
outfile << "年龄:" << p1->age << endl;
outfile << "姓名:" << p1->name << endl;
outfile << "性别:" << p1->sex << endl;
outfile << "专业:" << p1->major << endl;
outfile << "出生日期:" << p1->born << endl;
outfile << "家庭地址:" << p1->address << endl;
outfile << "英语成绩:" << p1->Math << endl;
p1 = p1->next;
}
outfile.close();
cout << "保存成功!" << endl;
getchar();
}
读取学生信息模块
运行结果示例:可以直接从文件中读取学生信息
文章来源:https://www.toymoban.com/news/detail-502071.html
代码如下:
//将学生信息写到终端
void Student::PutStuFile()
{
int count = 0;
char str[1024];
FILE* fp = fopen(".studentlist.txt", "r");
if (!fp)
{
return;
}
while (fgets(str, 1024, fp))
{
if (count % 8 == 0)
{
cout << endl;
}
cout << str;
count++;
}
fclose(fp);
system("pause");
}
增添学生信息模块
//增加学生信息
void Student::AddStu()
{
struct Student_Node* p1 = head->next;
struct Student_Node* p2;
int a = 1, b = 1;
int c; //学生的学号
while (p1->next != NULL)
{
p1 = p1->next;
a++;
}
cout << "\t\t\t\t请输入学生的学号:" << endl << "\t\t\t\t";
cin >> c;
p1 = head->next;
for (int i = 1; i <= a; i++)//判断学生的学号是否重复
{
if (p1->num == c)
{
cout << "\t\t\t\t出错:学号重复!!!" << endl;
b = 0;
break;
}
p1 = p1->next;
}
if (b != 0)//判断
{
p1 = head;
while (p1->next != NULL)
{
p1 = p1->next;
}
p2 = new Student_Node;
p2->num = c;
cout << "\t\t\t\t请输入学生的年龄:" << endl << "\t\t\t\t"; cin >> p2->age;
cout << "\t\t\t\t请输入学生的姓名:" << endl << "\t\t\t\t"; cin >> p2->name;
cout << "\t\t\t\t请输入学生的性别:" << endl << "\t\t\t\t"; cin >> p2->sex;
cout << "\t\t\t\t请输入学生的专业:" << endl << "\t\t\t\t"; cin >> p2->major;
cout << "\t\t\t\t请输入学生的出生日期:" << endl << "\t\t\t\t"; cin >> p2->born;
cout << "\t\t\t\t请输入学生的家庭住址:" << endl << "\t\t\t\t"; cin >> p2->address;
cout << "\t\t\t\t请输入学生的数学成绩:" << endl << "\t\t\t\t"; cin >> p2->Math;
p2->next = NULL;
p1->next = p2;
p1 = p2;
}
getchar();
}
删除学生信息模块
void Student::DeleteStu()
{
struct Student_Node* p1;
p1 = head;
struct Student_Node* p2;
int i = 1;
if (p1->next == NULL)
{
cout << "\t\t\t\t删除失败!!!" << endl;
cout << "\t\t\t\t无可用的数据!!!" << endl;
i = 0;
}
if (i == 1)
{
int j;
cout << "\t\t\t\t请输入您想要删除的学生的学号:" << endl << "\t\t\t\t";
cin >> j;
while (p1->next != NULL)
{
if (p1->next->num == j)
{
cout << "\t\t\t\t******删除成功********" << endl;
getchar();
p2 = p1->next;
p1->next = p2->next;
delete p2;
return;
}
p1 = p1->next;
}
cout << "\t\t\t\t删除错误!!!无法找到此学生的信息!!!" << endl;
}
getchar();
}
查找学生信息模块
void Student::FindStu()
{
int i = 0;
struct Student_Node* p1 = head->next;
int j;
cout << "\t\t\t\t|--------------------------|" << endl;
cout << "\t\t\t\t| |" << endl;
cout << "\t\t\t\t|【1】请输入学生的学号查询 |" << endl;
cout << "\t\t\t\t|【2】请输入学生的姓名查询 |" << endl;
cout << "\t\t\t\t| |" << endl;
cout << "\t\t\t\t|--------------------------|" << endl;
cout << "\t\t\t\t";
cin >> j;
switch (j)
{
case 1:
int a;
cout << "\t\t\t\t请输入学生的学号:" << endl << "\t\t\t\t";
cin >> a;
while (p1 != NULL)
{
if (p1->num == a)
{
cout << "\t\t\t\t该学生的学号:\t\t\t\t";
cout << p1->num << endl;
cout << "\t\t\t\t该学生的年龄:\t\t\t\t";
cout << p1->age << endl;
cout << "\t\t\t\t该学生的姓名:\t\t\t\t";
cout << p1->name << endl;
cout << "\t\t\t\t该学生的性别:\t\t\t\t";
cout << p1->sex << endl;
cout << "\t\t\t\t该学生的专业:\t\t\t\t";
cout << p1->major << endl;
cout << "\t\t\t\t该学生的出生日期:\t\t\t";
cout << p1->born << endl;
cout << "\t\t\t\t该学生的家庭住址:\t\t\t";
cout << p1->address << endl;
cout << "\t\t\t\t该学生的数学成绩:\t\t\t";
cout << p1->Math << endl;
i++;
}
p1 = p1->next;
}
if (i == 0)
{
cout << "\t\t\t\t查询错误!!!" << endl;
cout << "\t\t\t\t没有此学生的数据!!!" << endl;
}
break;
case 2:
char xingming[20];
cout << "\t\t\t\t请输入学生的姓名:" << endl;
cout << "\t\t\t\t";
cin >> xingming;
while (p1 != NULL)
{
if (strcmp(p1->name, xingming) == 0)
{
cout << "\t\t\t\t该学生的学号:\t\t\t\t";
cout << p1->num << endl;
cout << "\t\t\t\t该学生的年龄:\t\t\t\t";
cout << p1->age << endl;
cout << "\t\t\t\t该学生的姓名:\t\t\t\t";
cout << p1->name << endl;
cout << "\t\t\t\t该学生的性别:\t\t\t\t";
cout << p1->sex << endl;
cout << "\t\t\t\t该学生的专业:\t\t\t\t";
cout << p1->major << endl;
cout << "\t\t\t\t该学生的出生日期:\t\t\t";
cout << p1->born << endl;
cout << "\t\t\t\t该学生的家庭住址:\t\t\t";
cout << p1->address << endl;
cout << "\t\t\t\t该学生的数学成绩:\t\t\t";
cout << p1->Math;
i++;
}
p1 = p1->next;
}
if (i == 0)
{
cout << "\t\t\t\t查询错误!!!" << endl;
cout << "\t\t\t\t没有此学生的数据!!!" << endl;
}
break;
default:
cout << "\t\t\t\t信息错误!!!" << endl;
}
getchar();
}
修改学生信息模块
void Student::ModifyStu()
{
struct Student_Node* p1 = head->next;
struct Student_Node* p2 = head->next;
cout << "\t\t\t\t请输入需要修改的学生的学号:" << endl;
int i;
int j = 0;
int k = 1;
cout << "\t\t\t\t";
cin >> i;
while (p1)
{
if (p1->num == i)//对是否有该生的信息进行判断
{
j = 1;
}
p1 = p1->next;
}
if (j == 0)
{
cout << "\t\t\t\t错误!!!" << endl;
cout << "\t\t\t\t没有该生的信息!!!" << endl;
}
if (j == 1)
{
p1 = head->next;
while (p1)
{
if (p1->num == i)
{
cout << "\t\t\t\t-----------------------------" << endl;
cout << "\t\t\t\t|---【1】修改学生的学号------" << endl;
cout << "\t\t\t\t|---【2】修改学生的姓名------" << endl;
cout << "\t\t\t\t|---【3】修改学生的性别------" << endl;
cout << "\t\t\t\t|---【4】修改学生的专业------" << endl;
cout << "\t\t\t\t|---【5】修改学生的出生日期--" << endl;
cout << "\t\t\t\t|---【6】修改学生的家庭住址--" << endl;
cout << "\t\t\t\t|---【7】修改学生的数学成绩--" << endl;
cout << "\t\t\t\t|---【8】修改学生的年龄------" << endl;
cout << "\t\t\t\t|----------------------------" << endl;
int x;
cout << "\t\t\t\t";
cin >> x;
switch (x)
{
case 1:
cout << "\t\t\t\t请输入修改后的学号:" << endl;
int y;
cout << "\t\t\t\t";
cin >> y;
while (p2)
{
if (p2->num == y)
{
cout << "\t\t\t\t出错!!!" << endl;
cout << "\t\t\t\t学号重复!!!" << endl;
break;
k = 0;
}
p2 = p2->next;
}
if (k != 0)
{
p1->num = y;
}
break;
case 2:
cout << "\t\t\t\t请输入姓名:" << endl << "\t\t\t\t";
cin >> p1->name;
break;
case 3:
cout << "\t\t\t\t请输入性别:" << endl << "\t\t\t\t";
cin >> p1->sex;
break;
case 4:
cout << "\t\t\t\t请输入专业:" << endl << "\t\t\t\t";
cin >> p1->major;
break;
case 5:
cout << "\t\t\t\t请输入出生日期:" << endl << "\t\t\t\t";
cin >> p1->born;
break;
case 6:
cout << "\t\t\t\t请输入家庭住址:" << endl << "\t\t\t\t";
cin >> p1->address;
break;
case 7:
cout << "\t\t\t\t请输入数学成绩:" << endl << "\t\t\t\t";
cin >> p1->Math;
break;
case 8:
cout << "\t\t\t\t请输入年龄:" << endl << "\t\t\t\t";
cin >> p1->age;
break;
}
break;
}
}
}
getchar();
}
插入学生信息模块
void Student::InsertStu()
{
struct Student_Node* p1, * p2;
struct Student_Node* p3;
int i;
cout << "\t\t\t\t请输入要在哪个学号之后插入学生信息:" << endl << "\t\t\t\t";
cin >> i;
p1 = new Student_Node;
cout << "\t\t\t\t请输入待插入学生的学号:" << endl << "\t\t\t\t";
cin >> p1->num;
cout << "\t\t\t\t请输入待插入学生的年龄:" << endl << "\t\t\t\t";
cin >> p1->age;
cout << "\t\t\t\t请输入待插入学生的姓名:" << endl << "\t\t\t\t";
cin >> p1->name;
cout << "\t\t\t\t请输入待插入学生的性别:" << endl << "\t\t\t\t";
cin >> p1->sex;
cout << "\t\t\t\t请输入待插入学生的专业:" << endl << "\t\t\t\t";
cin >> p1->major;
cout << "\t\t\t\t请输入待插入学生的出生日期:" << endl << "\t\t\t\t";
cin >> p1->born;
cout << "\t\t\t\t请输入待插入学生的数学成绩:" << endl << "\t\t\t\t";
cin >> p1->Math;
cout << "\t\t\t\t请输入待插入学生的家庭住址:" << endl << "\t\t\t\t";
cin >> p1->address;
p2 = head->next;
p3 = head;
while (p2)
{
p3 = p2;
if (p3->num == i)
{
break;
}
p2 = p2->next;
}
p1->next = p3->next;
p3->next = p1;
getchar();
}
学生成绩排序模块
void Student::SortStu()
{
//由高分到低分排列
{
int i = 1;
if (head->next == NULL)
{
i = 0;
}
if (i == 0)
{
cout << "\t\t\t\t出错!!!" << endl;
cout << "\t\t\t\t没有找到学生的数据!!!" << endl;
}
if (i == 1)
{
struct Student_Node* p1, * p2;
int num_1;
int age_1;
char name_1[20];
char sex_1[10];
char major_1[10];
char born_1[10];
char address_1[10];
int Math_1;
int num_2;
int age_2;
char name_2[20];
char sex_2[10];
char major_2[10];
char born_2[10];
char address_2[10];
int Math_2;
for (p1 = head->next; p1 != NULL; p1 = p1->next)
{
for (p2 = p1->next; p2 != NULL; p2 = p2->next)
{
if (p1->Math < p2->Math)
{
num_1 = p1->num;
age_1 = p1->age;
strcpy(name_1, p1->name);
strcpy(sex_1, p1->sex);
strcpy(major_1, p1->major);
strcpy(born_1, p1->born);
strcpy(address_1, p1->address);
Math_1 = p1->Math;
num_2 = p2->num;
age_2 = p2->age;
strcpy(name_2, p2->name);
strcpy(sex_2, p2->sex);
strcpy(major_2, p2->major);
strcpy(born_2, p2->born);
strcpy(address_2, p2->address);
Math_2 = p2->Math;
p1->num = num_2;
p1->age = age_2;
strcpy(p1->name, name_2);
strcpy(p1->sex, sex_2);
strcpy(p1->major, major_2);
strcpy(p1->born, born_2);
strcpy(p1->address, address_2);
p1->Math = Math_2;
p2->num = num_1;
p2->age = age_1;
strcpy(p2->name, name_1);
strcpy(p2->sex, sex_1);
strcpy(p2->major, major_1);
strcpy(p2->born, born_1);
strcpy(p2->address, address_1);
p2->Math = Math_1;
}
}
}
cout << "\t\t\t\tWonderful*****排序成功*****" << endl;
}getchar();
}
}
到了这里,关于C++学习笔记(七)——学生信息管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!