以下内容可且仅可供参考,如有错误欢迎指正。
部分内容借鉴自百度
侵删致歉
目录
前言
一、需求分析
二、详细设计
三、用户使用说明
四、总结与体会
五、参考文献
六、附录(源代码)
定义类
函数
?
1、问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。 2、功能要求 (1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。 (3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。 (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。 (6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 3、问题的解决方案? 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告。
前言
随着高校校园信息化的逐步完善,有效地借助网络、数据库等技术提高工作和管理效率。如今针对师生的成绩查询系统、教务管理系统、招生就业系统、BBS、校园网站等系统在各大高校纷纷出现,对全校师生的学习、生活、管理、办公带来了便利。因此学生考勤管理系统能进一步加强高校学风建设,维护正常的教学秩序,给学生创造一个优良的学习环境。目前高校学生上课考勤管理都是以任课老师上课点名,记录学生上课情况,对于时间比较长的请假,需要通过递交请假申请让班主任、院系领导都批准方能生效。这种模式在目前高校管理中暴露了不可避免的弊端,因此一个好的学生考勤管理系统在一定程度上可以解决这些弊端,本系统主要针对目前高校学生上课出勤管理而设计的信息系统。
C++是一种使用非常广泛的程序设计语言。它是一种静态数据类型检查的,支持多范型的通用程序设计语言。C++支持过程化程序设计、数据抽象化、面向对象程序设计、泛型程序设计、基于原则设计等多种程序设计风格。
本系统利用DVc++来进行代码编写,实现了校园内部人员的信息添加、查询、编辑、统计、删除、显示、保存、读取等功能
本系统主要有两个类,即学生信息类以及缺勤类。该系统已进行全面的系统测试,能够很好的运行、基本达到预期效果。
一、需求分析
在信息化教育的今天,高校想实现教育的现代化,不但要优秀的师资力量,同时也要有好的软件系统。学生考勤管理系统设计是一套完善的信息化管理系统,用来实现学生考勤统一方便的信息操作,已实现学生考勤信息及时更新、及时反馈校园信息、完善教育质量、提高教育效率、分析校园需求、制定招生和招聘的管理目的。
1、问题描述
学生信息包括:学号、姓名、性别、年龄、班级等信息。
考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。
2、功能要求[i]
(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。
(3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
3、问题的解决方案
? ??根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
二、详细设计
本系统主要有2个类:学生信息类、考勤类,然后在这两个类中包含添加功能、查询功能、显示功能、编辑功能、删除功能、统计功能、保存功能、读取功能。我在学生考勤管理系统设计中,负责设计类的定义,头文件的编写,以及录入信息函数和读取信息函数,下面我来详细介绍这两个函数:
Student类
Student类中包含的数据成员有:学号(num),学生姓名(name),学生年龄(age),学生性别(sex),学生班级(addr),缺课次数(times)。
Student类中包含的成员函数有:
赋值学生学号:void set_num(int num);赋值学生姓名void set_name(char name[20]);赋值学生年龄:void set_age(int age);赋值学生性别:void set_sex(char sex[6]);赋值学生班级:void set_addr(char addr[20]);赋值学生缺课次数:void set_times(int times);获取学生学号:int get_num();获取学生姓名:char* get_name();获取学生年龄int get_age();获取学生性别:char* get_sex();获取学生班级:char* get_addr();获取学生缺课次数:int get_times();。
Absence类
Absence类中包含的数据成员有:学生学号(num1),学生姓名(name1),学生班级(addr1),缺课日期(date),第几节课缺课(n),缺课课程名称(cname),缺课类型(ckind)。
Absence类中包含的成员函数有:?
赋值学生学号:void set_num1(int num1);赋值学生姓名:void set_name1(char name1[20]);赋值学生班级:void set_addr1(char addr1[20]);赋值缺课日期:void set_date(char date[4]);赋值第几节课缺课:void set_n(int n);赋值缺课课程名称:void set_cname(char cname[20]);赋值缺课类型void set_ckind(char ckind[20]);获取学生学号:int get_num1();获取学生姓名:char* get_name1();获取学生班级:char* get_addr1();获取缺课日期:char* get_date();获取第几节课缺课:int get_n();获取缺课课程名称:char* get_cname();获取缺课类型:char* get_ckind();
Student类和Absence类以及成员函数的定义都在头文件”Student.h”中。
三、用户使用说明
某高校想实现教育的现代化,不但要优秀的师资力量,同时也要有好的软件系统。学生考勤管理系统设计是一套完善的信息化管理系统,用来实现学生考勤统一方便的信息操作,已实现学生考勤信息及时更新、及时反馈校园信息、完善教育质量、提高教育效率、分析校园需求、制定招生和招聘的管理目的。
功能特点:
(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。
(3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
四、总结与体会
本次c++课程设计我们所编写的程序是学生考勤管理系统。程序中实现了对学生及其考勤信息的添加、查询、修改、删除、统计的功能,设计的程序简单易懂,操作简单,且能运用于不同场景,只需按照自己的需要将所要录入的信息名称做添加或修改就可以实现。在这次c++的程序设计中,我对c++有了更加深入的了解,学习并巩固了我对c++的一些知识,像保存与读取功能的实现,在之前涉及的比较少,在学习c++时也没有完全掌握,在编写过程中通过同学帮助和网络资料的查阅让我有了深刻的理解。最后再说一句,虽然编程很累,但是在编程过程中取得的进步和成就却足以令人喜悦与兴奋。
五、参考文献
[1]谭浩强.C++面向对象程序设计(第3版).北京:清华大学出版社. 2020年
[2] 谭浩强.C++面向对象程序设计学习辅导(第3版).北京:清华大学出版社. 2020年
六、附录(源代码)
定义类
//学生类
#include<iostream>
#include<iomanip>//setw的头文件
#include<fstream>
#include<cstring>
using namespace std;
#define MAX 100
class Student
{
private:
int num; //基本信息
char name[20];
int age;
char sex[6];
char addr[20];
int times; //缺课次数
public:
Student();
void set_num(int num);
void set_name(char name[20]);
void set_age(int age);
void set_sex(char sex[6]);
void set_addr(char addr[20]);
void set_times(int times);
int get_num();
char* get_name();
int get_age();
char* get_sex();
char* get_addr();
int get_times();
};
class Absence {
private:
int num1; //基本信息
char name1[20];
char addr1[20];
char date[4]; //考勤信息
int n;
char cname[20];
char ckind[20];
public:
Absence();
void set_num1(int num1);
void set_name1(char name1[20]);
void set_addr1(char addr1[20]);
void set_date(char date[4]);
void set_n(int n);
void set_cname(char cname[20]);
void set_ckind(char ckind[20]);
int get_num1();
char* get_name1();
char* get_addr1();
char* get_date();
int get_n();
char* get_cname();
char* get_ckind();
};
Student::Student()
{
this->num = 0;
this->name[20] = ' ';
this->age = 20;
this->sex[6] = 'man';
this->addr[20] = ' ';
this->times = 0;
}
Absence::Absence()
{
this->num1 = 0;
this->name1[20] = ' ';
this->addr1[20] = ' ';
this->date[4] = '0520';
this->n = 1;
this->cname[20] = 'c++';
this->ckind[20] = ' ';
}
void Student::set_num(int num)
{
this->num = num;
}
void Student::set_name(char name[20])
{
memcpy(this->name, name, sizeof(this->name));//memcpy为内存拷贝函数
}
void Student::set_age(int age)
{
this->age = age;
}
void Student::set_sex(char sex[6])
{
memcpy(this->sex, sex, sizeof(this->sex));
}
void Student::set_addr(char addr[20])
{
memcpy(this->addr, addr, sizeof(this->addr));
}
void Student::set_times(int times) //设置学生缺课次数
{
this->times = times;
}
int Student::get_num()
{
return num;
}
char* Student::get_name()
{
return this->name;
}
int Student::get_age()
{
return this->age;
}
char* Student::get_sex()
{
return this->sex;
}
char* Student::get_addr()
{
return this->addr;
}
int Student::get_times()
{
return times;
}
//以下为Absence类成员函数
void Absence::set_num1(int num1)
{
this->num1 = num1;
}
void Absence::set_name1(char name1[20])
{
memcpy(this->name1, name1, sizeof(this->name1));
}
void Absence::set_addr1(char addr1[20])
{
memcpy(this->addr1, addr1, sizeof(this->addr1));
}
void Absence::set_date(char date[4])
{
memcpy(this->date, date, sizeof(this->date));
}
void Absence::set_n(int n)
{
this->n = n;
}
void Absence::set_cname(char cname[20])
{
memcpy(this->cname, cname, sizeof(this->cname));
}
void Absence::set_ckind(char ckind[20])
{
memcpy(this->ckind, ckind, sizeof(this->ckind));
}
//获取考勤信息
int Absence::get_num1()
{
return num1;
}
char* Absence::get_name1()
{
return this->name1;
}
char* Absence::get_addr1()
{
return this->addr1;
}
char* Absence::get_date()
{
return this->date;
}
int Absence::get_n()
{
return n;
}
char* Absence::get_cname()
{
return this->cname;
}
char* Absence::get_ckind()
{
return this->ckind;
}
函数
#include <windows.h>
#include<iostream>
#include<iomanip>
#include<fstream>
#include<cstring>
#include"Student.h"
using namespace std;
int iFile(Student b[MAX], Absence a[MAX], int& i, int& j, int& z, int& o) //读取信息
{
int g, k;
ifstream file1, file2, file3, file4;
file2.open("F:\\序数表.txt", ios::in); //记录人数 判断人数是否为0
file2 >> z; //z保存序数值
file4.open("F:\\缺勤记录序数表.txt", ios::in); //记录人数 判断人数是否为0
file4 >> o; //z保存序数值
i = z;
j = o;
if (z == 0) //没有信息无需读取
return 1;
file1.open("F:\\学生信息表.txt", ios::in); //记录学生信息
for (g = 0; g < i; g++) //将学生信息循环输入
{
int t1;
char t2[20];
int t3;
char t4[6];
char t5[20];
int t6;
file1 >> t1;
file1 >> t2;
file1 >> t3;
file1 >> t4;
file1 >> t5;
file1 >> t6;
b[g].set_num(t1);
b[g].set_name(t2);
b[g].set_age(t3);
b[g].set_sex(t4);
b[g].set_addr(t5);
b[g].set_times(t6);
}
file1.close();
if (o == 0) //没有信息无需读取
return 1;
file3.open("F:\\缺勤信息表.txt", ios::in);
for (k = 0; k < j; k++)
{
int a1;
char a2[20];
char a3[20];
char a4[4];
int a5;
char a6[20];
char a7[20];
file3 >> a1;
file3 >> a2;
file3 >> a3;
file3 >> a4;
file3 >> a5;
file3 >> a6;
file3 >> a7;
a[k].set_num1(a1);
a[k].set_name1(a2);
a[k].set_addr1(a3);
a[k].set_date(a4);
a[k].set_n(a5);
a[k].set_cname(a6);
a[k].set_ckind(a7);
}
file3.close();
return 1;
}
void oFile(Student b[MAX], Absence a[MAX], int i, int j, int z, int o) //录入信息
{
int g, k;
ofstream file1, file2, file3, file4; //利用ofstream类的构造函数创建一个文件输出流对象来打开文件
file2.open("F:\\序数表.txt", ios::out); //打开序数表
file2 << i; //保存当前学生人数
file4.open("F:\\缺勤记录序数表.txt", ios::out); //打开序数表
file4 << j; //保存当前学生人数
file1.open("F:\\学生信息表.txt", ios::out); //打开学生信息表
for (g = 0; g < i; g++)
{
int t1 = b[g].get_num();
string t2 = b[g].get_name();
int t3 = b[g].get_age();
string t4 = b[g].get_sex();
string t5 = b[g].get_addr();
int t6 = b[g].get_times();
file1 << t1 << endl;
file1 << t2 << endl;
file1 << t3 << endl;
file1 << t4 << endl;
file1 << t5 << endl;
file1 << t6 << endl;
}
file1.close();
file3.open("F:\\缺勤信息表.txt", ios::out);
for (k = 0; k < j; k++)
{
int a1 = a[k].get_num1();
string a2 = a[k].get_name1();
string a3 = a[k].get_addr1();
string a4 = a[k].get_date();
int a5 = a[k].get_n();
string a6 = a[k].get_cname();
string a7 = a[k].get_ckind();
file3 << a1 << endl;
file3 << a2 << endl;
file3 << a3 << endl;
file3 << a4 << endl;
file3 << a5 << endl;
file3 << a6 << endl;
file3 << a7 << endl;
}
file3.close();
}
int _Input_Student(Student b[100], int& i, int z)// 1.录入学生基本信息
{
int g = 0, k = 0;
char n;
char a;
for (i = z; i < MAX;) //Z是记录序数
{
cout << "===================================" << endl;
cout << "输入该学生的学号:";
int t1;
cin >> t1;
if (i != 0)//i不等于0说明已存有学生信息,需进行判断学生学号是否重复
{
for (g = 0; g < i; g++)
{
int c1 = b[g].get_num();
if (c1 == t1)
{
cout << "错误!学生学号重复录入!输入任意值返回菜单!" << endl;
cin >> n;
system("cls");
return 1;
}
else
{
continue; //继续循环
}
}
}
b[i].set_num(t1);
cout << "输入该学生的姓名:";
char t2[20];
cin >> t2;
b[i].set_name(t2);
cout << "输入该学生的年龄:";
int t3;
cin >> t3;
b[i].set_age(t3);
while (1)
{
cout << "输入该学生的性别(男/女):";
char t4[6];
cin >> t4;
if ((strcmp(t4, "男") == 0) || (strcmp(t4, "女") == 0)) //判断用户输入的数是否正确,strcmp用于与输入的数据做比较,若两字符串相同,返回结果等于0
{
b[i].set_sex(t4);
break;
}
else
cout << "您输入的信息有误!请输入 男 或 女 。" << endl;
}
cout << "输入该学生的班级:";
char t5[20];
cin >> t5;
b[i].set_addr(t5);
cout << "====================================" << endl;
cout << "您是否要继续输入(y/n) :";
i++;
while (1)
{
cin >> a;
if (a == 'y' || a == 'Y')
{
system("cls");
break;//跳出该循环,继续录入信息
}
if (a == 'n' || a == 'N')
{
system("cls");
return 1;//返回菜单
}
else
{
cout << "您输入的数据有误,请重新输入(y/n):" << endl;
}
}
}
return 1;
}
int _Input_Absence(Student b[100], Absence a[MAX], int& i, int& j, int& z, int& o)// 录入考勤信息
{
int g = 0, k = 0;
char n;
char m;
for (j = o; j < MAX;) //Z是记录序数
{
cout << "===================================" << endl;
cout << "输入该学生的学号:";
int a1;
cin >> a1;
for (g = 0; g < z; g++)
{
int t1 = b[g].get_num();
if (a1 == t1)//如果学生信息表中,有与输入的学号相同的,则进入循环
{
k++;//记录已找到学生信息
int t = b[g].get_times();//获取该学生的缺课次数
t++;//录入信息,自增记录
b[g].set_times(t);//把值返还
break;//找到了可以直接退出循环
}
}
if (k == 0)//k=0就是没有找到学生的信息
{
cout << "未找到该学生的基本信息,请确保该学生信息已录入!" << endl;
cout << "按任意键返回" << endl;
cin >> n;
system("cls");
return 1;
}
a[j].set_num1(a1);
cout << "输入该学生的姓名:";
char a2[20];
cin >> a2;
a[j].set_name1(a2);
cout << "输入该学生的班级:";
char a3[20];
cin >> a3;
a[j].set_addr1(a3);
cout << "输入该学生的缺勤日期(年-月-日):";
char a4[20];
cin >> a4;
a[j].set_date(a4);
cout << "输入该学生缺勤是第几节课:";
int a5;
cin >> a5;
a[j].set_n(a5);
cout << "输入该学生缺勤课程名称:";
char a6[20];
cin >> a6;
a[j].set_cname(a6);
while (1)
{
cout << "输入该学生缺勤类型(迟到/缺席/早退):";
char a7[20];
cin >> a7;
if ((strcmp(a7, "迟到") == 0) || (strcmp(a7, "缺席") == 0) || (strcmp(a7, "早退") == 0))
{
a[j].set_ckind(a7);
break;
}
else
cout << "您输入的信息有误!请输入 迟到/缺席/早退 。" << endl;
}
cout << "====================================" << endl;
cout << "您是否要继续输入(y/n) :";
j++;
while (1)
{
cin >> m;
if (m == 'y' || m == 'Y')
{
system("cls");
break;
}
if (m == 'n' || m == 'N')
{
system("cls");
return 1;
}
else
{
cout << "您输入的数据有误,请重新输入(y/n):" << endl;
}
}
}
return 1;
}
int _Modify(Student b[MAX], Absence a[MAX], int i, int z, int j1) //修改学生信息
{
int n;
if (i == 0)
{
cout << "暂无数据!" << endl;
cout << "回复任意键返回:";
cin >> n;
system("cls");
return 1;
}
int j, k;
char s;
while (1)
{
cout << "==========================================================================================" << endl;
cout << "学生基本信息表:" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|年 龄|\t|性 别|\t|班 级|\t|缺 勤 次 数|\t" << endl;
for (int g = 0; g < i; g++)
{
int t1 = b[g].get_num();
string t2 = b[g].get_name();
int t3 = b[g].get_age();
string t4 = b[g].get_sex();
string t5 = b[g].get_addr();
int t6 = b[g].get_times();
cout << setw(2) << g + 1 << "\t\t" << setw(11) << t1 << "\t" << setw(12) << t2 << "\t" << setw(12) << t3 << "\t" << setw(12) << t4 << "\t" << setw(12) << t5 << "\t" << setw(12) << t6 << endl;
}
cout << "==========================================================================================" << endl;
cout << "请输入需要修改的学生的序数或返回主页面(序数/0)" << endl;
cin >> k;
if (k == 0)
{
system("cls");
return 1;
}
int t = b[k - 1].get_num();
if (k > 0 && k <= i)
{
cout << "输入该学生的学号:";
int t1;
cin >> t1;
if (i != 0)
{
for (j = 0; j < i; j++)
{
if (k - 1 == j)
continue;
int c1 = b[j].get_num();
if (c1 == t1)
{
cout << "错误!学生学号重复录入!输入任意值返回菜单!" << endl;
cin >> n;
system("cls");
return 1;
}
else
{
continue;
}
}
}
b[k - 1].set_num(t1);
cout << "输入该学生的姓名:";
char t2[20];
cin >> t2;
b[k - 1].set_name(t2);
cout << "输入该学生的年龄:";
int t3;
cin >> t3;
b[k - 1].set_age(t3);
while (1)
{
cout << "输入该学生的性别(男/女):";
char t4[6];
cin >> t4;
if ((strcmp(t4, "男") == 0) || (strcmp(t4, "女") == 0)) //判断男女
{
b[k - 1].set_sex(t4);
break;
}
else
cout << "您输入的信息有误!请输入 男 或 女 。" << endl;
}
cout << "输入该学生的班级:";
char t5[20];
cin >> t5;
b[k - 1].set_addr(t5);
for (int k1 = 0; k1 < j1; k1++)
{
int a1 = a[k1].get_num1();
if (t == a1)
{
a[k1].set_addr1(t5);
a[k1].set_name1(t2);
a[k1].set_num1(t1);
}
}
system("cls");
cout << "修改后的";
}
else
{
cout << "没有此序号!回复任意字符返回:";
cin >> s;
system("cls");
}
}
}
int _Delete(Student b[100], Absence a[MAX], int& i, int& j)//删除学生信息
{
int n;
if (i == 0)
{
cout << "暂无数据!" << endl;
cout << "回复任意键返回:";
cin >> n;
system("cls");
return 1;
}
while (1)
{
cout << "==========================================================================================" << endl;
cout << "学生基本信息表:" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|年 龄|\t|性 别|\t|班 级|\t|缺 勤 次 数|\t" << endl;
for (int g = 0; g < i; g++)
{
int t1 = b[g].get_num();
string t2 = b[g].get_name();
int t3 = b[g].get_age();
string t4 = b[g].get_sex();
string t5 = b[g].get_addr();
int t6 = b[g].get_times();
cout << setw(2) << g + 1 << "\t\t" << setw(11) << t1 << "\t" << setw(12) << t2 << "\t" << setw(12) << t3 << "\t" << setw(12) << t4 << "\t" << setw(12) << t5 << "\t" << setw(12) << t6 << endl;
}
cout << "==========================================================================================" << endl;
cout << "请输入需要消除的学生的序数或返回主页面(序数/0)" << endl;
int k;
while (1)
{
cin >> k;
if (k == 0)
{
system("cls");
return 1;
}
if (k > i)
cout << "您输入的信息有误!请重新输入(序数/0):";
else
{
int t1 = b[k - 1].get_num();
int c3 = 0;
for (int k1 = 0; k1 < j; k1++)
{
int a1 = a[k1].get_num1();
if (t1 == a1)
{
for (int k2 = k1; k2 <= j; k2++)
a[k2] = a[k2 + 1];
c3++;
}
}
j = c3;
for (; k <= i; k++)
b[k - 1] = b[k];
i--;
system("cls");
cout << "修改后的:" << endl;
break;
}
}
}
}
int _Query(Student b[MAX], Absence a[MAX], int i, int j)//通过学号查询学生信息
{
int d, g, k;
char c, n;
cout << "==========================================================================================" << endl;
cout << "1.查询学生基本信息" << endl;
cout << "2.查询学生考勤信息" << endl;
cin >> c;
if (c == '1')
{
while (1)
{
cout << "请输入您需要查询的学生的学号:" << endl;
cin >> d;
for (g = 0; g < i; g++)
{
int t1 = b[g].get_num();
if (d == t1)
{
cout << "==========================================================================================" << endl;
cout << "该学生的" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|年 龄|\t|性 别|\t|班 级|\t|缺 勤 次 数|\t" << endl;
int t1 = b[g].get_num();
string t2 = b[g].get_name();
int t3 = b[g].get_age();
string t4 = b[g].get_sex();
string t5 = b[g].get_addr();
int t6 = b[g].get_times();
cout << setw(2) << g + 1 << "\t\t" << setw(11) << t1 << "\t" << setw(12) << t2 << "\t" << setw(12) << t3 << "\t" << setw(12) << t4 << "\t" << setw(12) << t5 << "\t" << setw(12) << t6 << endl;
break;
}
}
cout << "==========================================================================================" << endl;
if (g == i)
cout << "没有查询到该有关学号的信息。" << endl;
cout << "是否需要继续查询(y/n)" << endl;
while (1)
{
cin >> n;
if (n == 'y' || n == 'Y')
{
system("cls");
break;
}
if (n == 'n' || n == 'N')
{
system("cls");
return 1;
}
else
{
cout << "您输入的数据有误,请重新输入(y/n):" << endl;
continue;
}
}
}
}
if (c == '2')
{
while (1)
{
cout << "请输入您需要查询的学生的学号:" << endl;
cin >> d;
int co = 0;
for (k = 0; k < j; k++)
{
int a1 = a[k].get_num1();
if (d == a1)
{
co++;
}
}
if (co == 0)
{
cout << "没有查询到该有关学号的信息。请按任意键返回!" << endl;
cin >> n;
system("cls");
return 1;
}
cout << "==========================================================================================" << endl;
cout << "该学生的" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|班 级|\t|缺 勤 日 期|\t|第 几 节 课|\t|缺 勤 课 名|\t|缺 勤 类 型|\t" << endl;
for (k = 0; k < j; k++)
{
int a1 = a[k].get_num1();
if (d == a1)
{
int a1 = a[k].get_num1();
string a2 = a[k].get_name1();
string a3 = a[k].get_addr1();
string a4 = a[k].get_date();
int a5 = a[k].get_n();
string a6 = a[k].get_cname();
string a7 = a[k].get_ckind();
cout << setw(2) << k + 1 << "\t\t" << setw(11) << a1 << "\t" << setw(12) << a2 << "\t" << setw(12) << a3 << "\t" << setw(12) << a4 << "\t" << setw(12) << a5 << "\t" << setw(12) << a6 << "\t" << setw(12) << a7 << endl;
}
}
cout << "==========================================================================================" << endl;
cout << "是否需要继续查询(y/n)" << endl;
while (1)
{
cin >> n;
if (n == 'y' || n == 'Y')
{
system("cls");
break;
}
if (n == 'n' || n == 'N')
{
system("cls");
return 1;
}
else
{
cout << "您输入的数据有误,请重新输入(y/n):" << endl;
continue;
}
}
}
}
else
{
cout << "错误指令!请按任意键返回!" << endl;
cin >> n;
system("cls");
return 1;
}
}
int _Query2(Student b[MAX], Absence a[MAX], int i, int j)//通过学生姓名查询学生信息
{
string d;
int g, k;
char c, n;
cout << "==========================================================================================" << endl;
cout << "1.查询学生基本信息" << endl;
cout << "2.查询学生考勤信息" << endl;
cin >> c;
if (c == '1')
{
while (1)
{
cout << "请输入您需要查询的学生的姓名:" << endl;
cin >> d;
for (g = 0; g < i; g++)
{
string t1 = b[g].get_name();
if (d == t1)
{
cout << "==========================================================================================" << endl;
cout << "该学生的" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|年 龄|\t|性 别|\t|班 级|\t|缺 勤 次 数|\t" << endl;
int t1 = b[g].get_num();
string t2 = b[g].get_name();
int t3 = b[g].get_age();
string t4 = b[g].get_sex();
string t5 = b[g].get_addr();
int t6 = b[g].get_times();
cout << setw(2) << g + 1 << "\t\t" << setw(11) << t1 << "\t" << setw(12) << t2 << "\t" << setw(12) << t3 << "\t" << setw(12) << t4 << "\t" << setw(12) << t5 << "\t" << setw(12) << t6 << endl;
break;
}
}
cout << "==========================================================================================" << endl;
if (g == i)
cout << "没有查询到该有关姓名的信息。" << endl;
cout << "是否需要继续查询(y/n)" << endl;
while (1)
{
cin >> n;
if (n == 'y' || n == 'Y')
{
system("cls");
break;
}
if (n == 'n' || n == 'N')
{
system("cls");
return 1;
}
else
{
cout << "您输入的数据有误,请重新输入(y/n):" << endl;
continue;
}
}
}
}
if (c == '2')
{
while (1)
{
cout << "请输入您需要查询的学生的姓名:" << endl;
cin >> d;
int co = 0;
for (k = 0; k < j; k++)
{
string a1 = a[k].get_name1();
if (d == a1)
{
co++;
}
}
if (co == 0)
{
cout << "没有查询到该有关姓名的信息。请按任意键返回!" << endl;
cin >> n;
system("cls");
return 1;
}
cout << "==========================================================================================" << endl;
cout << "该学生的" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|班 级|\t|缺 勤 日 期|\t|第 几 节 课|\t|缺 勤 课 名|\t|缺 勤 类 型|\t" << endl;
for (k = 0; k < j; k++)
{
string a1 = a[k].get_name1();
if (d == a1)
{
int a1 = a[k].get_num1();
string a2 = a[k].get_name1();
string a3 = a[k].get_addr1();
string a4 = a[k].get_date();
int a5 = a[k].get_n();
string a6 = a[k].get_cname();
string a7 = a[k].get_ckind();
cout << setw(2) << k + 1 << "\t\t" << setw(11) << a1 << "\t" << setw(12) << a2 << "\t" << setw(12) << a3 << "\t" << setw(12) << a4 << "\t" << setw(12) << a5 << "\t" << setw(12) << a6 << "\t" << setw(12) << a7 << endl;
}
}
cout << "==========================================================================================" << endl;
cout << "是否需要继续查询(y/n)" << endl;
while (1)
{
cin >> n;
if (n == 'y' || n == 'Y')
{
system("cls");
break;
}
if (n == 'n' || n == 'N')
{
system("cls");
return 1;
}
else
{
cout << "您输入的数据有误,请重新输入(y/n):" << endl;
continue;
}
}
}
}
else
{
cout << "错误指令!请按任意键返回!" << endl;
cin >> n;
system("cls");
return 1;
}
}
int _Sta(Student b[MAX], Absence a[MAX], int i, int j)//按课程名称查询学生考勤信息
{
string d;
int g, k;
char c, n;
cout << "==========================================================================================" << endl;
while (1)
{
cout << "请输入您需要查询的课程名称:" << endl;
cin >> d;
int co = 0;
for (k = 0; k < j; k++)
{
string a1 = a[k].get_cname();
if (d == a1)
{
co++;
}
}
if (co == 0)
{
cout << "无此课程!!请按任意键返回!" << endl;
cin >> n;
system("cls");
return 1;
}
cout << "==========================================================================================" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|班 级|\t|缺 勤 日 期|\t|第 几 节 课|\t|缺 勤 类 型|\t" << endl;
int c2 = 0;
for (k = 0; k < j; k++)
{
string a1 = a[k].get_cname();
if (d == a1)
{
c2++;
int a1 = a[k].get_num1();
string a2 = a[k].get_name1();
string a3 = a[k].get_addr1();
string a4 = a[k].get_date();
int a5 = a[k].get_n();
string a7 = a[k].get_ckind();
cout << setw(2) << k + 1 << "\t\t" << setw(11) << a1 << "\t" << setw(12) << a2 << "\t" << setw(12) << a3 << "\t" << setw(12) << a4 << "\t" << setw(12) << a5 << "\t" << setw(12) << a7 << endl;
}
}
cout << "共" << c2 << "条数据。" << endl;
cout << "==========================================================================================" << endl;
cout << "是否需要继续查询(y/n)" << endl;
while (1)
{
cin >> n;
if (n == 'y' || n == 'Y')
{
system("cls");
break;
}
if (n == 'n' || n == 'N')
{
system("cls");
return 1;
}
else
{
cout << "您输入的数据有误,请重新输入(y/n):" << endl;
continue;
}
}
}
}
int _Display(Student b[MAX], Absence a[MAX], int i, int j)//显示当前学生信息
{
char n;
int g, k;
if (i == 0)
{
cout << "暂无数据!" << endl;
cout << "回复任意键返回:";
cin >> n;
system("cls");
return 1;
}
cout << "==========================================================================================" << endl;
cout << "学生基本信息表:" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|年 龄|\t|性 别|\t|班 级|\t|缺 勤 次 数|\t" << endl;
for (g = 0; g < i; g++)
{
int t1 = b[g].get_num();
string t2 = b[g].get_name();
int t3 = b[g].get_age();
string t4 = b[g].get_sex();
string t5 = b[g].get_addr();
int t6 = b[g].get_times();
cout << setw(2) << g + 1 << "\t\t" << setw(11) << t1 << "\t" << setw(12) << t2 << "\t" << setw(12) << t3 << "\t" << setw(12) << t4 << "\t" << setw(12) << t5 << "\t" << setw(12) << t6 << endl;
}
cout << "==========================================================================================" << endl;
cout << "学生考勤信息表:" << endl;
cout << "序数\t\t学 号|\t|姓 名|\t|班 级|\t|缺 勤 日 期|\t|第 几 节 课|\t|缺 勤 课 名|\t|缺 勤 类 型|\t" << endl;
if (j == 0)
{
cout << "暂无数据!" << endl;
}
for (k = 0; k < j; k++)
{
int a1 = a[k].get_num1();
string a2 = a[k].get_name1();
string a3 = a[k].get_addr1();
string a4 = a[k].get_date();
int a5 = a[k].get_n();
string a6 = a[k].get_cname();
string a7 = a[k].get_ckind();
cout << setw(2) << k + 1 << "\t\t" << setw(11) << a1 << "\t" << setw(12) << a2 << "\t" << setw(12) << a3 << "\t" << setw(12) << a4 << "\t" << setw(12) << a5 << "\t" << setw(12) << a6 << "\t" << setw(12) << a7 << endl;
}
cout << "==========================================================================================" << endl;
cout << "回复任意键返回:";
cin >> n;
system("cls");
return 1;
}
int main()
{
int i, z = 0, j = 0, o = 0;
char n, c;
Student x[MAX];
Absence y[MAX];
iFile(x, y, i, j, z, o);
while (1)
{
cout << "**************学生信息管理系统**************" << endl;
cout << " 1.录入学生基本信息" << endl;
cout << " 2.录入学生考勤信息" << endl;
cout << " 3.显示当前学生信息" << endl;
cout << " 4.修改学生信息(tips:请手动保存)" << endl;
cout << " 5.删除学生信息(tips:请手动保存)" << endl;
cout << " 6.按学号查询学生信息" << endl;
cout << " 7.按学生姓名查询学生信息" << endl;
cout << " 8.按课程名称查询学生考勤信息" << endl;
cout << " 9.保存文件" << endl;
cout << " 0.退出管理系统" << endl;
cout << "********************************************" << endl;
cout << "请选择序号:" << endl;
cin >> n;
switch (n)
{
case '1':system("cls"); iFile(x, y, i, j, z, o); _Input_Student(x, i, z); oFile(x, y, i, j, z, o); break;
case '2':system("cls"); iFile(x, y, i, j, z, o); _Input_Absence(x, y, i, j, z, o); oFile(x, y, i, j, z, o); break;
case '3':system("cls"); _Display(x, y, i, j); break;
case '4':system("cls"); _Modify(x, y, i, z, j); break;
case '5':system("cls"); _Delete(x, y, i, j); break;
case '6':system("cls"); _Query(x, y, i, j); break;
case '7':system("cls"); _Query2(x, y, i, j); break;
case '8':system("cls"); _Sta(x, y, i, j); break;
case '9':system("cls"); oFile(x, y, i, j, z, o); cout << "以保存,输入任意字符返回主菜单:"; cin >> c; system("cls"); break;
case '0':exit(0);
default:system("cls"); cout << "您输入的序号有误!\n输入任意字符返回主菜单"; cin >> c; system("cls");
}
}
return 0;
}
?
|