【C++】学籍管理系统(课程设计文档+源码)

摘要:本次课程设计任务是通过编写一个高校学籍管理系统,学习用Visual C++ 6.0开发简单的管理系统。采用Visual C++ 6.0软件为主要开发工具。  本系统主要完成对高校学生学籍信息的管理,包括学生信息的添加、修改、删除等。系统还可以完成对各类信息的浏览、查询、添加、删除、修改等功能。  由于我们还没有学习数据库,所以在有关大量学生信息存储时,此系统显得心有余而力不足。系统的核心是引用I/O流和文本处理来存储和修改学生信息,每一个动作都可能影响到其它的功能,还有数据的改变,当完成对数据的操作时系统会自动地完成数据的修改。

一 系统需求分析

1系统设计的目的与意义

(1)要求学生达到熟练掌握C++语言的基本知识和技能; 
(2)基本掌握面向对象程序设计的基本思路和方法; 
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。


2 系统功能需求
(1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。
(2)能够将指定的信息从文件中删除。
(3)能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。
(4)可以统计全部学生的总成绩,及其在班上的排名。
(5)能够统计各科的平均成绩及及格率。
(6)要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。
(7)如果检索不到相应的信息应提示用户。

 

二 总体设计
1 系统功能分析
系统要能够对相应的数据进行很好的测试,系统的统计对每一科的总成绩,平均成绩,及格律都进行了统计;系统数据的录入 除可以手工录入外,还可以采用文件的录入;系统统计学生的基本信息较全面,包括学号,姓名,民族,政治面貌,身份证号,生日,性别,数学、英语、计算机的成绩;程序中查找运用了两种查找方式即学号查找和姓名查找。

 

2 系统功能模块划分与设计(系统功能模块图)

 

三 详细设计
1 类设计
类1:student
数据成员:编号,姓名,性别,籍贯,民族,生日,政治面貌,身份证,高等数学成绩,大学英语成绩,线性代数成绩
class student                           
{
protected:                             
int number;                                //学号
char name[20];                             //姓名
char sex[6];                               //性别
char place[20];                            //籍贯
char nation[6];                            //民族
char birth[20];                            //出生日期
char party[10];                            //政治面貌
char id[20];                               //身份证号
float score[3];                            //成绩

类2:school
成员函数
录入函数input():逐步输入学生信息;
修改函数 mend():按姓名或编号修改学生信息;
统计函数count():统计各科的总成绩,计算平均成绩,统计各科的及格率;
查找函数found():按学号或姓名查找学生的记录;
修改函数mend():修改指定学号学生成绩记录;
删除函数del():删除指定学号学生记录;
输出函数show():输出班级所有学生成绩记录;
class school
{
void input();                                    //录入函数
void mend();                                     //修改函数
void del();                                      //删除函数
int find(student **p,int num,char *pn="^");      //子查找函数
void found();                                    //查找函数
void show();                                     //显示函数
void count();                                    //统计函数
void save();                                     //保存函数
void begin();                                    //初始化函数
void clear();                                    //清空函数
char mainmenu();                                 //主菜单函数

 

2 学生信息录入模块
void input()
{
int e=1;
cout<<"按提示输入:"<<endl;
cout<<"请输入编号: ";
cin>>number;
cout<<"请输入姓名: ";
cin>>name;
do
{
  cout<<"请输入性别: ";
  cin>>sex;
  if(strcmp(sex,"男")==0 || strcmp(sex,"女")==0)
  {
    cout<<"请输入籍贯: ";
    cin>>place;
    cout<<"请输入民族: ";
    cin>>nation;
    cout<<"请输入生日[格式xxxx/x/x]: ";
    cin>>birth;
    cout<<"请输入政治面貌: ";
    cin>>party;
    cout<<"请输入身份证号: ";
    cin>>id;
    cout<<"请输入高等高等数学分数: ";
cin>>score[0];
for(;score[0]>100||score[0]<0;)
{
cerr<<"输入错误,请重新输入!"<<endl;
   cin>>score[0];
}
    cout<<"请输入大学英语分数: ";
    cin>>score[1];
for(;score[1]>100||score[1]<0;)
{
cerr<<"输入错误,请重新输入!"<<endl;
   cin>>score[1];
}
    cout<<"请输入线性代数分数: ";
    cin>>score[2];
for(;score[2]>100||score[2]<0;)
{
cerr<<"输入错误,请重新输入!"<<endl;
   cin>>score[2];
}
    e=0;
  }
    else
  {
    cout<<"性别输入错误!重新输入!"<<endl;
    e=1;
  }
}while(e);
  return ;
}
void input(ifstream & is)                   
{
is>>number>>name>>sex>>place>>nation>>birth>>party>>id
  >>score[0]>>score[1]>>score[2];
is.get();                         
}


3 学生信息显示模块
void output()
{
cout<<"学生基本信息如下:"<<endl;
cout<<" 编号:"<<number<<endl
    <<" 姓名:"<<name<<endl
    <<" 性别:"<<sex<<endl
    <<" 籍贯:"<<place<<endl
    <<" 民族:"<<nation<<endl
    <<" 生日:"<<birth<<endl
    <<" 政治面貌:"<<party<<endl
    <<" 身份证号:"<<id<<endl
    <<" 高等高等数学:"<<score[0]<<endl
    <<" 大学英语:"<<score[1]<<endl
    <<" 线性代数:"<<score[2]<<endl
    <<" 总分:"<<getg()<<endl<<endl;
}
void output(ofstream & os)               
{
os<<number
  <<endl<<name
  <<endl<<sex
  <<endl<<place
  <<endl<<nation
  <<endl<<birth
  <<endl<<party
  <<endl<<id
  <<endl<<score[0]
  <<endl<<score[1]
  <<endl<<score[2]<<endl;
}
};


4 学生信息查找模块
void school::found()
{
student *p;
int num=-1,n=9;
char name[20]="^";
do
{
    cout<<"1:按编号查找,2:按姓名查找: ";
  cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"请输入编号: ";
  cin>>num;
}
if(n==2)
{
cout<<"请输入姓名: ";
cin>>name;
}
if(!find(&p,num,name) )
{
cout<<"SORRY!找不到你要查找的内容!"<<endl;
return;
}
(p->next)->output();
}


5 学生信息删除模块
void school::del()
{
student *p,*p2;
int num;
cout<<"请输入编号: ";
cin>>num;
if( !find(&p,num,"^") )
{
cout<<"SORRY!找不到你要删除的内容!"<<endl;
return;
}
(p->next)->output();
p2=p->next;
p->next=p2->next;
delete p2;
school::setkey(1);
}


6 学生信息修改模块
void school::mend()
{
student *p;
int num=-1,n;
char name[20]="^";
do
{
  cout<<"1:按编号修改,2:按姓名修改: ";
  cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"请输入编号: ";
  cin>>num;
}
if(n==2)
{
cout<<"请输入姓名: ";
cin>>name;
}
if( !find(&p,num,name) )
{
cout<<"SORRY!找不到你要修改的内容!"<<endl;
return;
}
(p->next)->output();
(p->next)->input();
school::setkey(1);
}


7 学生信息统计模块
void school::count()
{
student *p;
p=head;
int n=0;
double g[3]={0,0,0};
float j[3]={0,0,0};
while(p->next)
{
  p=p->next; 
  n++;
  for(int i=0;i<3;i++)
  { 
  g[i]=g[i]+(p->getscore(i) );


}
}
cout<<"高等高等数学总分:"<<g[0]<<" 平均分:"<<g[0]/n
<<endl<<"大学英语总分:"<<g[1]
<<" 平均分:"<<g[1]/n<<endl
<<"线性代数总分: "<<g[2]<<" 平均分: "<<g[2]/n
<<endl;
}


8 学生信息保存模块
void school::save()
{
student *p;
p=head;
ofstream os("d:\\student.txt",ios::out);
if (school::getkey()==1)
{
  while(p->next)
{
    (p->next)->output(os);
    p=p->next;
}
}
cout<<"文件已保存! "<<endl;
school::setkey(0);
}

 

四 系统实现
1 欢迎界面

 

2 录入学生信息界面

 

3 显示学生信息界面

 

4 查找学生信息界面

 

5 删除学生信息界面

 

6 修改学生信息

 

7 统计学生信息

 

五 实习后总结与体会
通过这次的c++课程设计我体会较深的一点是团队互相帮助学习的过程,自己看书学习的经验,以及从网上以及其他各种途径获得信息和知识的经验。理论与实际相结合的设计,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,我的各方面经验都得到了极大的丰富。
根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。
六 参考文献
[1].《c++语言程序与设计教程与实验第三版》 温秀梅 丁学钧  李建华 清华大学出版社

 

完整代码:

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
class student
{
protected:
	int	number;                         /* 学号 */
	char	name[20];                       /* 姓名 */
	char	sex[6];                         /* 性别 */
	char	place[20];                      /* 籍贯 */
	char	nation[6];                      /* 民族 */
	char	birth[20];                      /* 出生日期 */
	char	party[10];                      /* 政治面貌 */
	char	id[20];                         /* 身份证号 */
	float	score[3];                       /* 成绩 */
public:
	student *next;
	student()
	{
	}


	~student()
	{
	}


	char* getname()
	{
		return(name);
	}


	int getnumber()
	{
		return(number);
	}


	float getscore( int i )
	{
		return(score[i]);
	}


	float getg()
	{
		return(score[0] + score[1] + score[2]);
	}


/* 录入信息 */
	void input()
	{
		int e = 1;
		cout << "按提示输入:" << endl;
		cout << "请输入编号: ";
		cin >> number;
		cout << "请输入姓名: ";
		cin >> name;
		do
		{
			cout << "请输入性别: ";
			cin >> sex;
			if ( strcmp( sex, "男" ) == 0 || strcmp( sex, "女" ) == 0 )
			{
				cout << "请输入籍贯: ";
				cin >> place;
				cout << "请输入民族: ";
				cin >> nation;
				cout << "请输入生日[格式xxxx/x/x]: ";
				cin >> birth;
				cout << "请输入政治面貌: ";
				cin >> party;
				cout << "请输入身份证号: ";
				cin >> id;
				cout << "请输入高等高等数学分数: ";
				cin >> score[0];
				for (; score[0] > 100 || score[0] < 0; )
				{
					cerr << "输入错误,请重新输入!" << endl;
					cin >> score[0];
				}
				cout << "请输入大学英语分数: ";
				cin >> score[1];
				for (; score[1] > 100 || score[1] < 0; )
				{
					cerr << "输入错误,请重新输入!" << endl;
					cin >> score[1];
				}
				cout << "请输入线性代数分数: ";
				cin >> score[2];
				for (; score[2] > 100 || score[2] < 0; )
				{
					cerr << "输入错误,请重新输入!" << endl;
					cin >> score[2];
				}
				e = 0;
			} else{
				cout << "性别输入错误!重新输入!" << endl;
				e = 1;
			}
		}
		while ( e );
		return;
	}


	void input( ifstream & is )
	{
		is >> number >> name >> sex >> place >> nation >> birth >> party >> id
		>> score[0] >> score[1] >> score[2];
		is.get();
	}


/* 显示信息 */
	void output()
	{
		cout << "学生基本信息如下:" << endl;
		cout	<< " 编号:" << number << endl
			<< " 姓名:" << name << endl
			<< " 性别:" << sex << endl
			<< " 籍贯:" << place << endl
			<< " 民族:" << nation << endl
			<< " 生日:" << birth << endl
			<< " 政治面貌:" << party << endl
			<< " 身份证号:" << id << endl
			<< " 高等高等数学:" << score[0] << endl
			<< " 大学英语:" << score[1] << endl
			<< " 线性代数:" << score[2] << endl
			<< " 总分:" << getg() << endl << endl;
	}


	void output( ofstream & os )
	{
		os	<< number
			<< endl << name
			<< endl << sex
			<< endl << place
			<< endl << nation
			<< endl << birth
			<< endl << party
			<< endl << id
			<< endl << score[0]
			<< endl << score[1]
			<< endl << score[2] << endl;
	}
};

class school
{
public:
	school()
	{
		head = new student; head->next = NULL; key = 0;
	}


	~school()
	{
		delete head;
	}


	void input();                                           /* 录入函数 */


	void mend();                                            /* 修改函数 */


	void del();                                             /*删除函数 */


	int find( student **p, int num, char *pn = "^" );       /* 子查找函数 */


	void found();                                           /* 查找函数 */


	void show();                                            /* 显示函数 */


	void count();                                           /* 统计函数 */


	void save();                                            /* 保存函数 */


	void begin();                                           /* 初始化函数 */


	void clear();                                           /* 清空函数 */


	char mainmenu();                                        /* 主菜单函数 */


	int getkey()
	{
		return(key);
	}


	void setkey( int k )
	{
		key = k;
	}


private:
	student *head;
	int	key;
};
/* 录入函数 */
void school::input()
{
	student *p, *p2 = NULL;
	p = head;
	int n;
	while ( p->next )
		p = p->next;
	while ( n )
	{
		p2 = new student;
		p2->input();
		p->next		= p2;
		p2->next	= NULL;
		p		= p->next;
		school::setkey( 1 );
		cout << "按1继续,按0返回 : ";
		cin >> n;
	}
}


/* 子查找函数 */
int school::find( student **p1, int num, char *pn )
{
	student *p;
	p = head;
	while ( p->next )
	{
		(*p1) = p;
		if ( (p->next)->getnumber() == num || !strcmp( (p->next)->getname(), pn ) )
			return(1);
		p = p->next;
	}
	return(0);
}


/* 查找函数 */
void school::found()
{
	student *p;
	int	num		= -1, n = 9;
	char	name[20]	= "^";
	do
	{
		cout << "1:按编号查找,2:按姓名查找: ";
		cin >> n;
	}
	while ( n < 1 || n > 2 );
	if ( n == 1 )
	{
		cout << "请输入编号: ";
		cin >> num;
	}
	if ( n == 2 )
	{
		cout << "请输入姓名: ";
		cin >> name;
	}
	if ( !find( &p, num, name ) )
	{
		cout << "SORRY!找不到你要查找的内容!" << endl;
		return;
	}
	(p->next)->output();
}


/*删除函数 */
void school::del()
{
	student *p, *p2;
	int	num;
	cout << "请输入编号: ";
	cin >> num;
	if ( !find( &p, num, "^" ) )
	{
		cout << "SORRY!找不到你要删除的内容!" << endl;
		return;
	}
	(p->next)->output();
	p2	= p->next;
	p->next = p2->next;
	delete p2;
	school::setkey( 1 );
}


/* 显示函数 */
void school::show()
{
	student *p;
	p = head;
	while ( p->next )
	{
		(p->next)->output();
		p = p->next;
	}
}


/* 修改函数 */
void school::mend()
{
	student *p;
	int	num		= -1, n;
	char	name[20]	= "^";
	do
	{
		cout << "1:按编号修改,2:按姓名修改: ";
		cin >> n;
	}
	while ( n < 1 || n > 2 );
	if ( n == 1 )
	{
		cout << "请输入编号: ";
		cin >> num;
	}
	if ( n == 2 )
	{
		cout << "请输入姓名: ";
		cin >> name;
	}
	if ( !find( &p, num, name ) )
	{
		cout << "SORRY!找不到你要修改的内容!" << endl;
		return;
	}
	(p->next)->output();
	(p->next)->input();
	school::setkey( 1 );
}


/* 保存函数 */
void school::save()
{
	student *p;
	p = head;
	ofstream os( "d:\\student.txt", ios::out );
	if ( school::getkey() == 1 )
	{
		while ( p->next )
		{
			(p->next)->output( os );
			p = p->next;
		}
	}
	cout << "文件已保存! " << endl;
	school::setkey( 0 );
}


/* 初始化函数 */
void school::begin()
{
	student *p, *p2;
	p = head;
	clear();
	long		t;
	ifstream	is( "d:\\student.txt", ios::in );
	if ( !is )
	{
		ofstream os( "d:\\student.txt", ios::out );
		os.close();
		return;
	}
	int num = -1;
	while ( 1 )
	{
		num	= -1;
		t	= is.tellg();
		is >> num;
		is.seekg( t );
		if ( num < 0 )
		{
			is.close();
			return;
		}
		p2 = new student;
		p2->input( is );
		p->next		= p2;
		p2->next	= NULL;
		p		= p->next;
	}
}


/* 清空函数 */
void school::clear()
{
	student *p, *p2;
	p = head->next;
	while ( p )
	{
		p2	= p;
		p	= p->next;
		delete p2;
	}
}


/* 统计函数 */
void school::count()
{
	student *p;
	p = head;
	int	n	= 0;
	double	g[3]	= { 0, 0, 0 };
	float	j[3]	= { 0, 0, 0 };
	while ( p->next )
	{
		p = p->next;
		n++;
		for ( int i = 0; i < 3; i++ )
		{
			g[i] = g[i] + (p->getscore( i ) );
		}
	}
	cout	<< "高等高等数学总分:" << g[0] << " 平均分:" << g[0] / n
		<< endl << "大学英语总分:" << g[1]
		<< " 平均分:" << g[1] / n << endl
		<< "线性代数总分: " << g[2] << " 平均分: " << g[2] / n
		<< endl;
}


/* 主选菜单函数 */
char school::mainmenu()
{
	char n[6];
	cout	<< "\n\n              ☆☆☆☆欢迎进入高校学籍管理系统☆☆☆☆" << endl << endl
		<< "  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl
		<< "    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  " << endl
		<< "        * *     ☆      ☆ 1:   录入学生信息      ☆    * *" << endl
		<< "        * *    /.\\      ☆ 2:   显示学生信息     /.\\    * *" << endl
		<< "        * *   /..'\\     ☆ 3:   查找学生信息    /..'\\   * *" << endl
		<< "        * *   /'.'\\     ☆ 4:   删除学生信息    /'.'\\   * *" << endl
		<< "        * *  /.''.'\\    ☆ 5:   修改学生信息   /.''.'\\  * *" << endl
		<< "        * *  /.'.'.\\    ☆ 6:   统计学生成绩   /.'.'.\\  * *" << endl
		<< "        * * /'.''.'.\\   ☆ 7:   保存学生信息  /'.''.'.\\ * *" << endl
		<< "        * * ^^^[_]^^^   ☆ 0:   退出系统      ^^^[_]^^^ * *" << endl
		<< "    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * " << endl
		<< "  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl
		<< "                 请选择:";
	cin >> n;
	return(n[0]);
}


void main()
{
	school	p;
	int	k = 1;
	char	n;
	p.begin();
	while ( k == 1 )
	{
		n = p.mainmenu();
		switch ( n )
		{
		case '1': p.input(); break;
		case '2': p.show(); break;
		case '3': p.found(); break;
		case '4': p.del(); break;
		case '5': p.mend(); break;
		case '6': p.count(); break;
		case '7': p.save(); break;
		case '0':
			if ( p.getkey() == 1 )
			{
				cout << "\t\t\t是否保存? 1 : 保存 0:不保存 : ";
				cin >> k;
				if ( k == 1 )
					p.save();
			}
			p.clear();
			k = 0;
			break;
		}
	}
}

 

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值