前言
C++课设作业,学生信息管理系统,链表存储数据 (可提供源码)
学生信息管理系统
基本要求
1.实现学生端和教师端
2.登陆功能
3.学生信息的录入、浏览、添加、修改、查找
4.按照成绩排序
5.各科成绩分数段统计
6.其他自定义的功能
流程图
关键代码
1.//密码
//用getch函数,使得 不显示 用户输入的密码,并输出 * 以提示
string password()
{
string temp;
char c;
cout<<"请输入密码:";
while(1){
c=_getch();
if(c!=13)//回车键ASCII值 {
temp=temp+c;
cout<<"*";}
else
break;}
return temp;}
void Password()
{
string z="00000000";//账号
string m="1234abcd";//密码
string m1,z1;
int n=3;
while(1){
cout<<"请输入账号:";
cin>> z1;
m1=password();
if(m1==m||z1==z){
cout<<"\n"<<"登陆成功"<<"\n"<<endl;
break; }
else{
cout<<"\n"<<"账号或密码错误,请重新输入"<<endl;
--n;
cout<<"剩余机会:"<<n<<"次"<<endl;
if(n==0){
cout<<"退出系统"<<endl;
exit(0);//退出
}}}}
2.//定义学生数据的结构体
struct information
{
int num;
char name[20];
char sex[6];
double math;
double english;
double computer;
double average;};
3. //定义链表结构体
typedef struct node
{
struct information data;
struct node* next;
}Student;
4. //创建链表
Student* createlist()
{
Student* head = new Student;//头节点
head->next = NULL;
return head;
}
5. system("cls"); //清屏
6. //录入
void AddStudent(Student* head)
{
Student* pre = head;
for (int i = 0; i < length(head); i++)//找到链表最后一个节点 把录入数据接到最后 {
pre = pre->next;}
Student* p = new Student;
a1: Student* c = head->next;
cout << "输入学生学号:" << endl;
cin >> p->data.num;
for(int j = 0; j < length(head); j++) {
if(c->data.num==p->data.num)//防止输入重复的学号 {
cout<<"学号重复,请重新输入"<<endl;
goto a1;}
c=c->next;}
cout << "输入学生姓名:" << endl;
cin >> p->data.name;
cout << "输入学生性别:" << endl;
cin >> p->data.sex;
cout << "输入学生数学成绩:" << endl;
cin >> p->data.math;
cout << "输入学生英语成绩:" << endl;
cin >> p->data.english;
cout << "输入学生计算机成绩:" << endl;
cin >> p->data.computer;
p->data.average = (p->data.math + p->data.english + p->data.computer) / 3;
pre->next = p;
pre = p;
p->next = NULL;}
7. //查找
Student* Search1(Student* head, int index) //学号查找
{
Student* p = head;
while (p->data.num != index){
p = p->next;}
return p;}
Student* Search2(Student* head, char* index)//姓名查找
{
Student* p = head;
while (strcmp(p->data.name, index))
p = p->next;
return p;
}
8.//添加
//index为要添加到的位置 调用函数时可以用键盘输入
void insertelement(Student* head, int index)
{
Student* pre = head;
for (int i = 0; i < index - 1; i++){
pre = pre->next;}
Student* newNode = new Student;
a2: Student* c = head->next;
cout << "输入学生学号:" << endl;
cin >> newNode->data.num;
for(int j = 0; j < length(head); j++) //防止输入重复学号{
if(c->data.num==newNode->data.num){
cout<<"学号重复,请重新输入"<<endl;
goto a2;}
c=c->next;}
cout << "输入学生姓名:" << endl;
cin >> newNode->data.name;
cout << "输入学生性别:" << endl;
cin >> newNode->data.sex;
cout << "输入学生数学成绩:" << endl;
cin >> newNode->data.math;
cout << "输入学生英语成绩:" << endl;
cin >> newNode->data.english;
cout << "输入学生计算机成绩:" << endl;
cin >> newNode->data.computer;
newNode->data.average = (newNode->data.math + newNode->data.english + newNode->data.computer) / 3;
newNode->next = pre->next;
pre->next = newNode;
system("cls");}
9. //求学生数据个数
int length(Student* head)
{
int count = 0;
Student* p = head->next;
while (p != NULL){
count++;
p = p->next;}
return count;}
测试结果
1. 欢迎界面
2.端口选择
3.按下1进入教师端
4.需要输入账号密码
5.错误输入账号或密码
6.三次错误地输入账号或密码则退出系统
7.正确输入账号和密码
8.进入教师端操作界面
9.操作一 录入信息
若学号与链表中原有学号相同 会提示请重新输入
10.操作二 浏览信息
按下1存到文本文件 提示后返回选项菜单 按下其他键直接返回选项菜单
文本中
11.操作3 排序学生
升序
降序
12.操作4 修改信息
修改第2个同学信息 更新为 数学80 英语80 计算机80
修改后再次执行 操作2:浏览信息 数据已更新
若学号与之前学号相同 会提示重新输入学号
13.操作5 添加信息
添加后 执行操作2:浏览信息 数据已更新
若输入的学号与已有学号相同 则提示重新输入学号
14.操作6 删除信息 删除第三个同学信息
删除后执行操作2 浏览信息 数据已更新
15.操作7 查找信息
按下1 学号查找
按下2 姓名查找
16.操作8 统计信息
17.操作9 退出系统
学生端 不需要账号密码
1.操作1 浏览学生信息
2.操作2 排序学生信息
升序
降序
3.操作三 查找学生信息
按下1 学号查找
按下2 姓名查找
4.操作4 退出系统