学生考勤管理系统设计_c++课程设计

以下内容可且仅可供参考,如有错误欢迎指正。

部分内容借鉴自百度

侵删致歉

目录

前言

一、需求分析

二、详细设计

三、用户使用说明

四、总结与体会

五、参考文献

六、附录(源代码)

定义类

函数


 

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;
}

 

  • 36
    点赞
  • 309
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
Python学生考勤管理系统设计如下: 考勤管理系统是为了方便学校或培训机构对学生出勤情况进行记录和统计而设计的软件系统。Python作为一种功能强大和易于学习的编程语言,非常适合用于开发应用程序,包括学生考勤管理系统。 首先,该系统需要一个学生信息的数据库,包括学生的姓名、学号、班级等基本信息,可以使用Python的数据库模块如SQLite或MySQL来实现。 其次,系统需要记录学生的考勤情况。可以设计一个日历界面,让教师可以进行每天的考勤记录。教师可以选择课程,输入日期和时间,选择班级,然后开始考勤。学生可以使用学号进行签到,系统即可自动记录学生的出勤情况。 另外,系统还需要提供一些功能,如考勤统计、查询和报告生成。通过统计功能,可以及时查看学生的考勤情况,包括出勤次数、迟到次数和缺勤次数等。查询功能可以根据不同的条件来查询学生的考勤记录,方便教师和学校管理人员对学生的出勤情况进行查询和分析。最后,系统可以生成考勤报告,以便于学校管理人员和教师对学生的考勤情况进行总结和评估。 总之,Python学生考勤管理系统设计主要包括学生信息的数据库、考勤的记录和统计功能以及查询和报告生成功能。通过这个系统,可以方便地管理学生的考勤情况,提高学生出勤率,并方便教师和学校管理人员对学生的考勤情况进行分析和评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值