今天下午有个面试,但是不想复习,就将写好的这个简单学生关系系统发布出来。
另:祝愿自己面试顺利,加油!

============================================================
本篇涉及到的知识点:
1、单链表的遍历、插入、删除
2、switch分支处理键盘输入
3、类外实现、多文件编程
4、ofstream操作文件、写文件

  • ofstream打开文件

    • 使用对象打开文件 outfile.open(“student.txt”, ios::out || ios::app);
    • 默认方式打开文件 ofstream out(“student.txt”);
    • 参数如下
  • 关闭文件 outfile.close();

========================================================
说明:
1、Student类中有学号、姓名、分数三个公有成员,私有成员next用于组织链表
2、系统的功能:

  • 录入学生信息(学生信息以链表形式存储)
  • 修改学生信息
  • 删除学生信息(链表删除节点)
  • 查看学生信息
  • 将全部的学生信息写入student.txt文件(遍历链表,写入文件)
  • 根据学生成绩排名(对链表节点排序,已经更新实现)
    • 单链表的排序一般针对带头节点的而言(交换节点、交换数据域)
    • 本篇采用了一个交换节点的方法实现
    • 单链表排序、逆置以后可能会在某一个小项目中具体再讨论

3|、代码中可能会缺少注释,有时间再补上。

===========================================================
student.h

#ifndef _STUDENT_H_
#define _STUDENT_H_class Student{public:/*******构造***********/Student(char* num, char* name, float score);Student();char stu_num[15];char stu_name[30];float stu_score;void afterInsert(Student* p); //后插void afterDelete(); //后删Student* getNext();/*******查询学生信息**********/void getMesg();/*******修改学生信息**********/void changeMesg(int n,char* ptr);void changeGrade(float  f);private:Student* next;
};
#endif

student.cpp(负责类外实现)

#define  _CRT_SECURE_NO_WARNINGS
#include "student.h"
#include <cstring>
#include <iostream>
using namespace std;Student::Student(){strcpy(this->stu_num, "");strcpy(this->stu_name, "");this->stu_score = 0;this->next = NULL;
}
Student::Student(char* num, char* name, float score){strcpy(this->stu_num, num);strcpy(this->stu_name, name);this->stu_score = score;this->next = NULL;
}void Student::afterInsert(Student* p){ //后插p->next = this->next;this->next = p;
}
void Student::afterDelete(){ //后删Student* pTmp = this->next;this->next = pTmp->next;delete pTmp;}
Student* Student::getNext(){return this->next;
}void Student::getMesg(){cout << "学号:" << stu_num << "  姓名" << stu_name << "  成绩" << stu_score<<endl;
}void Student::changeMesg(int n, char* ptr){switch (n){case 1:strcpy(stu_num, ptr);break;case 2:strcpy(stu_name, ptr);break;;default:break;}
}
void Student::changeGrade(float  f){this->stu_score = f;
}

主函数main(主菜单、构建链表、查询学生、修改信息、删除学生)

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include "student.h"using namespace std;//建立链表函数(创建学生)
void creatList(Student* stu){Student* p = new Student;char str[30];//学号或者姓名float score;//分数cout << "输入学号:";cin >> str;p->changeMesg(1, str);memset(str, 0, sizeof(str));//清空strcout << "输入姓名:";cin >> str;p->changeMesg(2, str);memset(str, 0, sizeof(str));//清空strcout << "输入得分:";cin >> score;p->changeGrade(score);system("cls");cout << "信息输入完成!" << endl;while (stu->getNext())        //寻找尾节点stu = stu->getNext();stu->afterInsert(p);//TODO...文件处理
}//学生信息查询
Student* findMesg(Student* stu){loop:cout << "1、按姓名查询\t2、按学号查询\tq、返回上一级菜单" << endl;char p[5], ptr[30];Student* pCur = stu;cin >> p;if (p[0] != '1' && p[0] != '2' && p[0] != 'q' || strlen(p) > 1){cout << "您的输入有误,重新输入" << endl;goto loop;}switch (p[0]){case '1':cout << "输入要查找的姓名:";cin >> ptr;for (; strcmp(ptr, pCur->stu_name) != 0;){if (pCur->getNext() == NULL){cout << "对不起,您要查找的人不存在!" << endl;goto loop;}pCur = pCur->getNext();}return pCur;case '2':cout << "输入要查找的学号:";cin >> ptr;for (; strcmp(ptr, pCur->stu_num) != 0;){if (pCur->getNext() == NULL){cout << "对不起,您要查找的学号不存在!" << endl;goto loop;}pCur = pCur->getNext();}return pCur;case 'q':system("cls");cout << "您的输入有误,请重新输入!" << endl;goto loop;}
}
//删除链表节点
void delList(Student* stu){Student* p = NULL;char selet[4];//system("cls");cout << "删除前,会根据您的提示找到您要删除的学生信息" << endl;p = findMesg(stu);if (p != NULL){cout << "确认删除吗?(yes/任意键返回)" << endl;cin >> selet;if (strcmp(selet, "yes") == 0){for (; stu->getNext() != p;){stu = stu->getNext();}stu->afterDelete();cout << "该学生信息删除成功!" << endl;}}
}//修改节点信息
void changeInfo(Student* stu){system("cls");cout << "修改前,会根据您提供的信息查找到您要修改的信息" << endl;Student* p = NULL;float score;p = findMesg(stu);if (p != NULL){cout << "请输入成绩" << endl;cin >> score;p->changeGrade(score);cout << "修改成功" << endl;}
}
void putStu(Student* stu){system("cls");cout << "1、查看指定学生信息\t2、查看所有学生信息\t3、分段输出学生信息" << endl;char ch;int n = 0;stu = stu->getNext();cin >> ch;switch (ch){case '1':stu = findMesg(stu);if (stu == NULL){break;}stu->getMesg();break;case'2':while (stu){stu->getMesg();stu = stu->getNext();}break;case'3':cout << "a-60分以下;b-60~70分之间;c-70~80分之间;d-80~90分之间;e-90~100分之间:" << endl;cin >> ch;switch (ch){case'a':while (stu){if (stu->stu_score <= 60){stu->getMesg();++n;}stu = stu->getNext();}break;case'b':while (stu){if (stu->stu_score > 60 && stu->stu_score <= 70){stu->getMesg();++n;}stu = stu->getNext();}break;case'c':while (stu){if (stu->stu_score > 70 && stu->stu_score <= 80){stu->getMesg();++n;}stu = stu->getNext();}break;case'd':while (stu){if (stu->stu_score > 80 && stu->stu_score <= 90){stu->getMesg();++n;}stu = stu->getNext();}break;case'e':while (stu){if (stu->stu_score > 90 && stu->stu_score <= 100){stu->getMesg();++n;}stu = stu->getNext();}break;}if (n == 0){cout << "没有改分数段的学生" << endl;}}
}//对学生成绩排序(2018.11.15更新)
void insertSort(Student* stu){Student* list = NULL;if (stu == NULL)return;else{list = (Student*)malloc(sizeof(Student));strcpy(list->stu_name, "");strcpy(list->stu_num, "");list->stu_score = 0;list->setNext(stu);}//保证有2个数据才排序if (list->getNext() == NULL || (list->getNext()->getNext() == NULL))return;Student *head, *p1, *p2, *prep1, *prep2, *temp;head = list;prep1 = head->getNext();p1 = prep1->getNext();bool flag;while (p1 != NULL){flag = true;temp = p1;for (prep2 = head, p2 = prep2->getNext(); p2 != p1; prep2 = prep2->getNext(), p2 = p2->getNext()){//从小打到排序if (p2->stu_score > p1->stu_score){//将p1节点拿出来p1 = p1->getNext();prep1->setNext(p1) ;//p1节点插入到p2之前prep2->setNext(temp);temp->setNext(p2);flag = false;//一个数据插入完成break;}}if (flag){          //处理后续数据prep1 = prep1->getNext();p1 = p1->getNext();}}
}//主菜单
void menu(Student* stu){char selet[10];int n = 1;ofstream outfile;//ifstream infile;Student *p, *ptr,*mid;cout << "*************************欢迎进入学生信息管理系统*************************" << endl;do {cout << "**************************************************************************" << endl;cout << "1.插入信息;   2.删除信息;  3.修改信息; 4.查看信息; 5.保存  " << endl;cout << "按'q'键退出      " << endl;cout << "**************************************************************************" << endl;cin >> selet;if (((selet[0]<'1' || selet[0]>'6') && selet[0] != 'q') || strlen(selet) > 1){//system("cls");cout << "您的输入有误,请重新输入!" << endl;break;}switch (selet[0]){case'1':creatList(stu);break;case'2':delList(stu);break;case'3':changeInfo(stu);break;case'4':putStu(stu);break;case'5':outfile.open("student.txt", ios::out || ios::app);for (p = stu->getNext(); p != NULL; p = p->getNext()){outfile << p->stu_num << " ";outfile << p->stu_name << " ";outfile << p->stu_score << " ";outfile << endl;}outfile.close();system("cls");cout << "保存成功!" << endl;break;case'q':break;}} while (selet[0] != 'q');
}
int main(){Student head;menu(&head);system("pause");
}

学生管理系统-C++版相关推荐

  1. 学生管理系统Java版

    简单的学生管理系统 主界面编写: 1.用输出语句完成主界面的编写 2.用Scanner语句实现键盘的录入 3.用swich语句完成操作的选择 4.用循环完成再次回到主界面 代码实现: while (t ...

  2. android的学生管理系统,Android版学生管理系统

    用户可以输入姓名.性别.年龄三个字段,通过点击添加学生按钮,将学生信息展示到开始为空的ScrollView控件中,ScrollView控件只能包裹一个控件,我这里包裹的是LinearLayout.点击 ...

  3. 学生管理系统(web版)

    一个简单的网页版学生系统,含修改,删除,详情,模糊删除 --主页面 实现代码 <form action="mhcx.jsp?wid=<%=request.getParameter ...

  4. Struts2StudentsInfoManage学生管理系统struts2版

    java1234官网 验证码换一张功能 首先要有一个自动生成验证码的jsp文件,如image.jsp,我们只需要掌握里面的 // 将认证码存入SESSION session.setAttribute( ...

  5. python学生管理系统gui版好例子网_python图书管理系统gui 相关实例(示例源码)下载 - 好例子网...

    开发语言:Python | 大小:19.05M | 发布时间:2019-05-27 | 发布人:李易峰 相关标签: 立即下载 开发语言:Python | 大小:0.21M | 发布时间:2020-08 ...

  6. 学生管理系统(Java版)(普通版(增删改查)、增强版(登录、注册、忘记密码))

    普通版需求如下: 学生管理系统分为四个部分:增删改查 主菜单: 增部分:(在增加前,我们要判断id的唯一性,因此我们可以遍历ArrayList数组,再调用String的equals方法,进行判断) 删 ...

  7. python-web学生管理系统

    我们先来看一下效果吧:(ps:以下需要用到Pycharm,navicat for Mysql等软件) 可以根据姓名或者性别来模糊查找: 接下来我们再看看增添学生: 查看一下删除功能(如删除3号学生)吧 ...

  8. C/C++语言实现 学生管理系统

    C/C++语言实现 学生管理系统 首先,让我分部分介绍本学生管理系统 本系统分为两个大板块,分别是学生版和教师版,学生版又分出三个具体功能,教师版分为七个功能,让我依次来介绍它们吧! (一)学生版 1 ...

  9. 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...

最新文章

  1. ceph unfound object问题的解决
  2. Qt导入CMakeLists.txt后无法调试
  3. Swift学习--常量.变量.数据类型的使用(一)
  4. 蚂蚁面试:字符串在JVM中如何存放?
  5. access课程均不及格_access 第二章 查询 练习题 -
  6. 关于meta便签详解
  7. ViewState机制由浅入深1
  8. 对抗攻击之SMI-FGSM:北航提出用空间动量提高对抗迁移性
  9. qt获取cpu使用率_又一次生产 CPU 高负载排查实践
  10. nginx linux 系统服务,把ngnix注册为linux服务 将Nginx设置为linux下的服务
  11. 游戏筑基开发之变量、运算符、转义字符的注意点(C语言)
  12. HDOJ--1864--最大报销额
  13. 开源免费录屏和直播软件OBS Studio教程
  14. 月是故乡明,每逢佳节倍思亲,近乡情更怯
  15. 基于php732电子杂志投稿审核网站
  16. ppt文件如何压缩到最小?
  17. Java程序员掌握的Linux 基本操作
  18. 初识mysql实验小结_初识mysql学习笔记
  19. 相机旋转矩阵求解三个姿态角
  20. java武士风度_情感故事:淡定,淡定,再淡定!

热门文章

  1. 【数据结构】最小生成树(Prim算法,普里姆算法,普利姆)、最短路径(Dijkstra算法,迪杰斯特拉算法,单源最短路径)
  2. 每日一词20190316——GIS矢量数据和栅格数据对比
  3. Mac空格键快速预览不能用了怎么办?
  4. Kafka安装与简介
  5. 华为认证Datacom考试内容
  6. ubuntu18.04关闭笔记本触摸板
  7. 找回密码功能 java_Java实现邮件找回密码功能
  8. chrome安装插件,安装Postman
  9. 做自媒体怎样开始起步?
  10. 在所有样式为“标题 1”的段落前插入分页型分节符