⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 123.cpp

📁 用C++编写的学生学籍管理系统
💻 CPP
字号:
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<iomanip.h> 
class student
{
protected:
	char number[15];  char name[20];
	char sex[6];   char place[20];
	char nation[6];  int year; int month; int day;
	char party[10];  char id[20];
	float score[3];
public:
	student *next;
	student(){ }
	~student(){ }
	char * getname()
	{
		return name;
	}
	char * getnumber()
	{ 
		return number;
	}
	double getscore(int i)
	{
		return score[i];
	}
	float getTotal()
	{
		return (score[0]+score[1]+score[2]);
	}
	void input()
	{
        int e=1;
        cout<<"\t\t\t按提示输入:"<<endl;
        cout<<"\t\t输入编号: ";   cin>>number;
        cout<<"\t\t输入姓名: ";   cin>>name;
        do
        {
			cout<<"\t\t输入性别: ";
			cin>>sex;
			if(strcmp(sex,"男")==0 || strcmp(sex,"女")==0)
			{ 
				cout<<"\t\t输入籍贯: ";cin>>place;cout<<"\t\t输入民族: ";cin>>nation;
				do
				{
					cout<<"\t\t输入生日年份(1949—2049): ";
					cin>>year;
					if(year>=1949&&year<2050) break;
					cout<<"\t\t数据输入错误,请重新输入!"<<endl;
				}while(1);
				do
				{
					cout<<"\t\t        月份(1—12): ";
					cin>>month;
					if(month>=1&&month<13) break;
					cout<<"\t\t数据输入错误,请重新输入!"<<endl;
				}while(1);
				while(1)
				{
					cout<<"\t\t        日期: ";
					cin>>day;
					if((day>31||day<0)||(month==2&&day>29)||(year%4!=0&&month==2&&day>28)||((month==4||month==6||month==9||month==11)&&day==31))
						cout<<"\t\t数据输入错误,请重新输入!"<<endl;
					else break;
				};
				cout<<"\t\t输入政治面貌: ";cin>>party;
				cout<<"\t\t输入身份证号: ";cin>>id;
				cout<<"\t\t输入数学分数: ";cin>>score[0];
				cout<<"\t\t输入英语分数: ";cin>>score[1];
				cout<<"\t\t输入计算机分数: ";cin>>score[2];
				e=0;
			}
			else
		    {
				cout<<"\t\t\t无此类型性别!重新输入!"<<endl;
				e=1;
			}
		}while(e);
	}
	void input(ifstream & is)
	{
		is>>setw(15)>>number>>setw(20)>>name>>setw(6)>>sex>>setw(20)>>place
		>>setw(6)>>nation>>setw(6)>>year>>setw(6)>>month>>setw(6)>>day>>setw(20)>>party
		>>setw(20)>>id>>setw(6)>>score[0]>>setw(6)>>score[1]
		>>setw(6)>>score[2];
		is.get();
	}
	void output()
	{
		cout<<"学生基本信息如下:"<<endl;
		cout<<"编号:"<<number<<" 姓名:"<<name<<" 性别:"<<sex <<" 籍贯:"<<place
			<<" 民族:"<<nation<<" 生日:"<<year<<"年"<<month<<"月"<<day<<"日"<<" 政治面貌:"<<party<<endl
			<<"身份证号:"<<id<<" 数学:"<<score[0]<<" 英语:"<<score[1]
			<<" 计算机:"<<score[2]<<" 总分:"<<getTotal()<<endl<<endl;
	}
	void output(ofstream & os)
	{
		os<<setw(15)<<number<<setw(20)<<name<<setw(6)<<sex<<setw(20)<<place
		<<setw(6)<<nation<<setw(6)<<year<<setw(6)<<month<<setw(6)<<day<<setw(20)<<party
		<<setw(20)<<id<<setw(6)<<score[0]<<setw(6)<<score[1]
		<<setw(6)<<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,char * nn,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<<"\t\t\t按1继续,按0返回 : ";
		cin>>n;
	}
}
//子查找函数
int school::find(student **p1,char * nn,char *pn)
{
	student *p;
	p=head;
	while(p->next)
	{
		(*p1)=p;
		if( !strcmp( (p->next)->getnumber(),nn)||!strcmp( (p->next)->getname(),pn ) )
				return 1;  
		p=p->next;
	}
	return 0; 
}
//查找函数
void school::found()
{
	student *p;
	int n=9;
	char name[20]="^",num[15]="^";
	do
	{
		cout<<"\t\t1:按编号查找,2:按姓名查找: ";
		cin>>n;
	}while(n<1||n>2);
	if(n==1)
	{
		cout<<"\t\t\t输入编号: ";
		cin>>num;
	}
	if(n==2)
	{ 
		cout<<"\t\t\t输入姓名: ";
		cin>>name;
	}
	if(!find(&p,num,name) )
	{ 
		cout<<"\t\t找不到你要查找的内容!"<<endl;
		return;
	}
	(p->next)->output();
}
//删除函数
void school::del()
{
	student *p,*p2;
	int n;
	char name[20],num[15];
	do
	{
		cout<<"\t\t1:按编号查找,2:按姓名查找: ";
		cin>>n;
	}while(n<1||n>2);
	if(n==1)
	{
		cout<<"\t\t\t输入编号: ";
		cin>>num;
	}
	if(n==2)
	{ 
		cout<<"\t\t\t输入姓名: ";
		cin>>name;
	}
	if( !find(&p,num,name) )
	{
		cout<<"\t\t找不到你要删除的内容!"<<endl;
		return;
	}
	(p->next)->output();
	p2=p->next; 
	p->next=p2->next;
	delete p2;
	if(n==1)
	{
		cout<<"编号为"<<num<<"的学生资料已删除!"<<endl;
	}
	else cout<<"姓名为"<<name<<"的学生资料已删除!"<<endl;
	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 n;
	char name[20]="^",num[15]="^";
	do
	{
		cout<<"\t\t1:按编号修改,2:按姓名修改: ";
		cin>>n;
	}while(n<1||n>2);
	if(n==1)
	{
		cout<<"\t\t\t输入编号: ";
		cin>>num;
	}
	if(n==2)
	{
		cout<<"\t\t\t输入姓名: ";
		cin>>name;
	}
	if( !find(&p,num,name) )
	{ 
		cout<<"\t\t找不到你要修改的内容!"<<endl;
		return;
	}
	(p->next)->output();
	(p->next)->input();
	school::setkey(1);
}
//保存函数
void school::save()
{
	student *p;
	p=head;
	ofstream os("student.txt",ios::out);
	if (school::getkey()==1)
	{
		while(p->next)
		{
			(p->next)->output(os);
			p=p->next;
		}
	}
	cout<<"\t\t\t文件已保存! "<<endl;
	school::setkey(0);
}
//初始化函数
void school::begin()
{
	student *p,*p2;
	p=head;
	long t;
	ifstream is("student.txt",ios::in);
	if(!is)
	{
		ofstream os("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()
{
	ofstream os("student.txt",ios::out);
	os.clear();
	student *p,*p2;
	p=head->next;
	while( p )
	{
		p2=p;
		p=p->next;
		delete p2;
	}
	cout<<"\t\t\t数据已清空! "<<endl;
}
//统计函数
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++)
			{
				(p->getscore(i) )>=60.0? j[i]++ : 0;
				g[i]=g[i]+( p->getscore(i) );
			}
	}
	cout<<"\n\t\t数学总分:"<<g[0]<<" 平均分:"<<g[0]/n
		<<" 及格率:"<<j[0]/n<<endl<<"\t\t英语总分:"<<g[1]
		<<" 平均分:"<<g[1]/n<<" 及格率:"<<j[1]/n<<endl
		<<"\t\t计算机总分: "<<g[2]<<" 平均分: "<<g[2]/n
		<<" 及格率:"<<j[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
		<<"     * *         8:   清空学生信息           * *"<<endl
		<<"     * *         0:   退出系统               * *"<<endl
		<<"     * * * * * * * * * * * * * * * * * * * * * *"<<endl
		<<"     * * * * * * * * * * * * * * * * * * * * * *"<<endl
		<<"                 请选择:";
	cin>>n;
	return n[0];
}
void main()
{
	school pp;
	int k=1;  char n; pp.begin();
	while(k==1)
	{
		n=pp.mainmenu();
		switch(n)
		{
		case '1':pp.input(); break;
		case '2':pp.show(); break;
		case '3':pp.found(); break;
		case '4':pp.del(); break;
		case '5':pp.mend(); break;
		case '6':pp.count(); break;
		case '7':pp.save(); break;
		case '8':pp.clear();break;
		case '0':
			if(pp.getkey()==1)
			{
				cout<<"\t\t\t是否保存? 1 : 保存 0:不保存 : ";
				cin>>k;
				if(k==0)
				{
					pp.clear();
					break;
				}
				else
				{
					pp.save();
					k=0;
				}
			}
			else n=0,k=0;		
			break;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -