c++课设学生成绩与学籍管理系统
题目要求(手打,累):设计一个类CStudent,类中包含一个学生的基本数据如下:
编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。
并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。如:
1 LiPing m 18 89 98 94
请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具体连续编码的编号num为"序"来对文件中各对象进行随机读写处理)。并设计该类的成员函数,而且对输出运算符"<<"进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。要求成员函数完成以下功能:
(1) 从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。
(2) 按编号对学生信息进行检索并将检索结果显示在屏幕上。
(3) 按姓名对学生信息进行检索并将检索结果显示在屏幕上。
(4) 计算某编号学生的总成绩与平均成绩。
(5) 列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。
思考:可进一步对上述程序进行扩充,如,添加学生的基本数据(籍贯,专业,班级,其他各门成绩,奖罚记录等),并添加所需要的其他相关处理函数(如可通过咨询教学办公室管理人员后确立),进而将其编织成为一个简单而且实用的小型学籍与成绩管理软件。
以下为代码:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <iomanip>
using namespace std;
#define NUM 10000
void Menu(); //菜单功能
class CStudent
{
private:
int num; //编号
string name; //姓名
char gender; //性别
int age; //年龄
double math; //数学成绩
double physics; //物理成绩
double computer; //计算机成绩
double english; //外语成绩
string major; //专业
string RP; //奖罚记录
double sum; //总成绩
double ave; //平均成绩
public:
void Insert(CStudent & S); //插入,添加
void Dlete(); //删除
void Numseek(); //按编号查找
void Nameseek(); //按姓名查找
void Grade(); //计算某个学生的平均成绩和总成绩
void Sort(CStudent & S); //对学生的总成绩进行排序
void Inquire(double n, char ch); //根据输入的成绩和性别排查超过输入成绩且性别一样的同学
void Save(); //保存数据到文件
void Read(); //读取数据
void Sum(){sum = math + physics + computer + english;} //计算总成绩
void Ave(){ave = (math + physics + computer + english) / 4;}
void operator <<(CStudent & S)
{
cout << setw(5) << S.num << setw(5) << S.name << setw(5) << S.gender << setw(5) << S.age << setw(5) << S.math << setw(5) << S.physics << setw(7) << S.computer
<< setw(5)<< S.english << setw(5) << S.major << setw(9) << S.RP << endl;
}
};
static int j;
CStudent C[NUM];
int main()
{
fstream File("学生学籍与成绩管理系统.txt");
cout << "\n\t\t^^^检查文件是否存在中^^^" << endl << endl << endl;
if(!File)
{
cout << "\t\t文件不存在,请创建名为学生学籍与成绩管理系统的文档!" << endl;
exit(1);
}
cout << "\t\t该文件存在,是否进入管理系统" << endl << endl << endl;
cout << "\t\t是请按1,不是请按0" <<endl << endl << endl;
bool n;
cin >> n;
if(!n)
{
cout << "\t\t谢谢使用!" << endl;
File.close();
exit(1);
}
File.close();
CStudent S;
char ch;
while(1)
{
Menu();
cin >> ch;
switch(ch)
{
case '1':{S.Insert(S); break;}
case '2':{S.Dlete(); break;}
case '3':{S.Numseek(); break;}
case '4':{S.Nameseek(); break;}
case '5':{S.Grade(); break;}
case '6':{S.Sort(S); break;}
case '7':{double n; char ch; cout << "请输入要查询多少分以上的成绩\n"; cin >> n; cout << "请输入性别\n";
cin >> ch; S.Inquire(n, ch); break;}
case '8':{S.Read(); break;}
case '0':{exit(0);}
}
}
return 0;
}
//---------------------------------------------------------------------------------------------------菜单功能
void Menu()
{
system("cls");
cout << "\n\t\t\t欢迎进入学生学籍与成绩管理系统" << endl << endl;
cout << "\t\t\t按1添加数据" << endl << endl;
cout << "\t\t\t按2删除数据" << endl << endl;
cout << "\t\t\t按3根据编号查找学生信息" << endl << endl;
cout << "\t\t\t按4根据姓名查找学生信息" << endl << endl;
cout << "\t\t\t按5输入学生编号计算他的平均成绩和总成绩" << endl << endl;
cout << "\t\t\t按6排序" << endl << endl;
cout << "\t\t\t按7输入成绩和性别查询学生" << endl << endl;
cout << "\t\t\t按8读取数据" << endl << endl;
cout << "\t\t\t按0退出程序" << endl << endl;
}
//---------------------------------------------------------------------------------------------------插入添加
void CStudent::Insert(CStudent & S)
{
while(1)
{
bool judge = true;
cout << "\n\n请输入编号(1~10000):";
cin >> S.num;
cout << "\n请输入姓名:";
cin >> S.name;
for(int i = 0; i <= j; i++)
{
if(C[i].num == S.num || (C[i].name).compare(S.name) == 0) //判断了编号重复和姓名重复的情况
{
cout << "输入编号或姓名重复,退出添加系统" << endl;
system("pause");
judge = false;
}
}
if(judge == false)
break;
while(1)
{
cout << "\n请输入性别(男:m,女:n):";
cin >> S.gender;
if(S.gender == 'm' || S.gender == 'n')
break;
else
cout << "格式输入错误" << endl;
}
cout << "\n请输入年龄:";
cin >> S.age;
cout << "\n请输入数学成绩:";
cin >> S.math;
cout << "\n请输入物理成绩:";
cin >> S.physics;
cout << "\n请输入计算机成绩:";
cin >> S.computer;
cout << "\n请输入外语成绩:";
cin >> S.english;
cout << "\n请输入专业:";
cin >> S.major;
cout << "\n请输入奖罚记录:";
cin >> S.RP;
cout << "\n是否保存数据(按1保存,按0不保存):";
char ch;
cin >> ch;
if(ch == '1')
{
C[j] = S;
j++;
Save();
}
else
{
cout << "数据没保存" << endl << endl;
}
cout << "\n是否继续添加(按1继续,按0退出添加程序)?" << endl;
cin >> ch;
if(ch == '0')
break;
}
}
//---------------------------------------------------------------------------------------------------删除
void CStudent::Dlete()
{
while(1)
{
int num;
cout << "请输入你要删除的学生的编号:";
cin >> num;
for(int i = 0; i < j; i++)
{
if(C[num-1].num == C[i].num)
for(int k = i; k < j; k++)
C[k] = C[k+1];
}
char ch;
cout << "\n是否删除数据(按1删除,按0不删除):";
cin >> ch;
if(ch == '1')
{
j--;
Save();
}
else
{
cout << "数据没删除" << endl << endl;
}
cout << "\n是否继续删除(按1继续,按0退出删除程序)?" << endl;
cin >> ch;
if(ch == '0')
break;
}
}
//---------------------------------------------------------------------------------------------------按编号查找
void CStudent::Numseek()
{
while(1)
{
bool judge = false;
int num;
cout << "请输入要查找的学生的编号:";
cin >> num;
for(int i = 0; i < j; i++)
if(num == C[i].num)
{
cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
<< setw(5) << "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << endl;
C[i] << C[i];
judge = true;
}
if(judge == false)
cout << "你输入的学生编号不存在" << endl;
char ch;
cout << "是否继续查找(按1继续,按0退出查找程序)?" << endl;
cin >> ch;
if(ch == '0')
break;
}
}
//---------------------------------------------------------------------------------------------------按姓名查找
void CStudent::Nameseek()
{
while(1)
{
bool judge = false;
string name;
cout << "请输入要查找的学生的姓名:";
cin >> name;
for(int i = 0; i < j; i++)
if(name.compare(C[i].name) == 0)
{
cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
<< setw(5) << "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << endl;
C[i] << C[i];
judge = true;
}
if(judge == false)
cout << "你输入的学生姓名不存在" << endl;
char ch;
cout << "是否继续查找(按1继续,按0退出查找程序)?" << endl;
cin >> ch;
if(ch == '0')
break;
}
}
//--------------------------------------------------------------------------------------------------计算学生的总成绩和平均成绩
void CStudent::Grade()
{
for(int i = 0; i < j; i++)
{
C[i].Sum();
C[i].Ave();
}
cout << "请输入学生的编号:";
int num;
cin >> num;
for(int i = 0; i < j; i++)
if(C[i].num == num)
{
cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
<< setw(5)<< "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << setw(9) << "平均成绩" << setw(7) << "总成绩" << endl;
cout << setw(5) << C[i].num << setw(5) << C[i].name << setw(5) << C[i].gender << setw(5) << C[i].age << setw(5) << C[i].math << setw(5) << C[i].physics << setw(7) << C[i].computer
<< setw(5) << C[i].english << setw(5) << C[i].major << setw(9) << C[i].RP << setw(9) << C[i].ave << setw(7) << C[i].sum << endl;
}
system("pause");
}
//--------------------------------------------------------------------------------------------------对学生的总成绩进行排序
void CStudent::Sort(CStudent & S)
{
for(int i = 0; i < j; i++)
C[i].Sum();
for(int i = 0; i < j; i++)
for(int k = i+1; k < j; k++)
if(C[k].sum > C[i].sum)
{
S = C[k];
C[k] = C[i];
C[i] = S;
}
cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
<< setw(5)<< "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << setw(7) << "总成绩" << endl;
for(int i = 0; i < j; i++)
cout << setw(5) << C[i].num << setw(5) << C[i].name << setw(5) << C[i].gender << setw(5) << C[i].age << setw(5) << C[i].math << setw(5) << C[i].physics << setw(7) << C[i].computer
<< setw(5) << C[i].english << setw(5) << C[i].major << setw(9) << C[i].RP << setw(7) << C[i].sum << endl;
system("pause");
}
//---------------------------------------------------------------------------------------------------//根据输入的成绩和性别排查超过输入成绩且性别一样的同学
void CStudent::Inquire(double n, char ch)
{
for(int i = 0; i < j; i++)
C[i].Sum();
bool judge = false;
for(int i = 0; i < j; i++)
{
if(C[i].sum >= n && C[i].gender == ch)
{
cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
<< setw(5) << "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << endl;
C[i] << C[i];
judge = true;
}
}
if(judge == false)
cout << "没有相匹配的学生" << endl;
system("pause");
}
//---------------------------------------------------------------------------------------------------读取数据
void CStudent::Read()
{
cout << endl << endl;
ifstream File2("学生学籍与成绩管理系统.txt");
static char st[81];
while(!File2.eof())
{
File2.getline(st, 80);
cout << st << endl;
}
File2.close();
system("pause");
}
//----------------------------------------------------------------------------------------------------保存数据到文件
void CStudent::Save()
{
ofstream File1("学生学籍与成绩管理系统.txt", ios::binary); //以二进制添加的方式输入数据
File1 << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
<< setw(5) << "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << endl;
for(int i = 0; i < j; i++)
File1 << setw(5) << C[i].num << setw(5) << C[i].name << setw(5) << C[i].gender << setw(5) << C[i].age << setw(5) << C[i].math << setw(5) << C[i].physics << setw(7) << C[i].computer
<< setw(5) << C[i].english << setw(5) << C[i].major << setw(9) << C[i].RP << endl;
cout << "\n\n数据已保存到文件中" << endl << endl;
File1.close();
}
c++课设学生成绩与学籍管理系统的更多相关文章
- Java学生成绩绩点管理系统
一.考试要求: 1.按照测试内容要求完成程序的设计与编程: 2.建立学号姓名文件夹,如:“信 1805-1 班 20180001 XXX”,将源程序文件保存在文件夹中,压缩成 rar 文件提交. 3. ...
- JAVA课设 学生基本信息管理 团队博客
1.成员 邹其元 网络1512 201521123060 杨钧宇 网络1512 201521123062 2.项目Git地址 团队项目码云地址 //添加截图 3. 项目git提交记录截图(要体现出每个 ...
- Java项目:学生成绩管理系统(二)
学生成绩管理系统(二):项目介绍 一.设计要求: 1.1 简单的图形界面登录功能. 1.2 对数据库的的信息的查询功能. 1.3 对数据库的的信息的修改功能. 1.4 对数据库的的信息的删除功能. 1 ...
- 学生管理系统 C++课设
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> u ...
- Qt实现学生学籍管理系统(文件存储)
记录 19:53 2019-07-30 在小学期学c++做完课设后萌生了把写完的课设放在博客上的想法,于是,我第一篇博客诞生了. 22:32:19 2019-07-30 下棋 16:04:56 201 ...
- Java课程设计—学生成绩管理系统(201521123005 杨雪莹)
一.团队课程设计博客链接 学生成绩管理系统 二.个人负责模块或任务说明 学生成绩录入 显示所有学生信息 显示各科平均成绩 显示学生成绩(按降序排序) 三.自己的代码提交记录截图 四.自己负责模块或任务 ...
- Java项目:学生成绩管理系统(一)
学生成绩管理系统(一) 项目名称:学生成绩管理系统 项目需求分析(Need 需求): (1)该系统的用户分为教师和学生.教师的功能有:管理某一学生或课程的信息以及成绩,包括增.删.查.报表打印等:学生 ...
- c++学生成绩管理系统
虽然比较水 =.= 但是写了两节课+一个中午 都是强迫症的锅 http://www.cnblogs.com/wenruo/p/4940182.html #include <cstdio> ...
- Java课程设计—学生成绩管理系统(201521123004-林艺如)
1.团队课程设计博客 团队课程设计博客链接 2.个人负责模块或任务说明 ①.Menu Menu.jsp 在页面中给出提示,用HTML的 MenuTeacher.jsp 利用Menu.jsp进行具体化完 ...
随机推荐
- ASP.NET 散碎知识
1.按钮点击打开一个新的Web窗体,可在按钮点击事件里面写:Response.Redirect("窗体的名字.aspx"); 2.复合控件: CheckBoxList - 复选框组 ...
- Centos 7升级内核
检查当前 CentOS 系统内核版本 uname -sr 在 CentOS 7 上启用 ELRepo 仓库 rpm --import https://www.elrepo.org/RPM-GPG-KE ...
- vue 巧妙的运用sass px 转 rem
<template> <div id="app"> <!-- <img src="./assets/logo.png"> ...
- input 文本框,对中文长度校验
在项目中,经常会遇到,对文本框进行校验. eg. 要求姓名长度为20,中文为10,只能输入中英文. <input maxlength="20" type="t ...
- 求前n项的斐波那契数列、求两个数的最小公倍数、求两个数的最大公约数
class Fib(object): def __call__(self,n): a=[0,1] for i in range(n-2): an ...
- hive mysql 初始化
原文链接:https://juejin.im/post/59c3f8f75188255be81f91d9#heading-17 Apache Hive-2.3.0 快速搭建与使用 Hive 简介 Hi ...
- Cacti日志时区问题
cacti默认是以美国的时间为准的,监测的适合要纠正到UTC+8的时区. 打开vi /home/cacti/include/config.php 文件,在里面加入一行 date_default_tim ...
- sqlmap自动注入
基于python2.7开发 git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
- JMeter学习(七)聚合报告之 90% Line 正确理解(转载)
转载自 http://www.cnblogs.com/yangxia-test 90% Line 参数正确的含义: 虽然,我的上面理解有一定的道理,显然它是错误的.那看看JMeter 官网是怎么说的? ...
- JMeter学习(一)工具简单介绍(转载)
转载自 http://www.cnblogs.com/yangxia-test 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的 ...