您的位置:首页 > 其它

软件实习-学生管理系统

2014-06-29 21:00 267 查看
/*10.学生信息管理  
[问题描述]
编写一个程序实现学生基本信息的管理功能。
[基本要求]
(1)每个学生的基本信息包括:学号,姓名,性别,出生日期,所属学院,专业,年级等,其中学号不允许重复。。
(2)采用交互工作方式,输入N个学生的基本信息,N的值大于10。
(3)建立数据文件,存入所输入的N个学生的信息,数据文件按关键字(学号)进行排序,排序方法可以自己选择。
(4)可以对学生的基本信息进行更新操作(添加、删除),更新之后的数据文件保持原有的有序性。
(5)查询操作: (用二分查找实现以下操作)
A.按姓名查询 
B.按学号查询
C.提供模糊查找的功能,如输入“刘”,可以查找到所有姓“刘”的学生的基本信息。
*/
#include<iostream>
#define N 100
using namespace std;
class sim
{
public:
	void init(sim s[],int n);
	void show(sim s[],int n);
	void insert(sim s[],int n,int n1);
	void del(sim s[],int n,int n2);
	void find1(sim s[],int n,char f[]);
	void find2(sim s[],int n,char f[]);
	void find3(sim s[],int n,char c[]);
	char sname[20];//sname 本来应该代表sn(student number) ,但是我马虎写成了 sname,所以.....
	char name[20];
	char sex[4];
	char bd[20];//birthday
	char c[20];//college
	char m[20];//major
	char g[20];//grade
};
void sim::init(sim s[],int n)//initialization.
{
	for(int i=0;i<n;i++)
	{
		cout<<"请输入学号"<<endl;
		cin>>s[i].sname;
		cout<<"请输入姓名"<<endl;
		cin>>s[i].name;
		cout<<"请输入性别"<<endl;
		cin>>s[i].sex;
		cout<<"请输入出生日期"<<endl;
		cin>>s[i].bd;
		cout<<"请输入所属学院"<<endl;
		cin>>s[i].c;
		cout<<"请输入所属专业"<<endl;
		cin>>s[i].m;
		cout<<"请输入年级"<<endl;
		cin>>s[i].g;
	}
}
void sim::show(sim s[],int n)//输出已输入的数据
{	
	int j=0;
	for(int i=0;i<n;i++)
	{
		cout<<endl;
		cout<<"学号: "<<s[i].sname<<endl;
		cout<<"姓名: "<<s[i].name<<endl;
		cout<<"性别(1 for male, 0 for female): "<<s[i].sex<<endl;
		cout<<"出生日期: "<<s[i].bd<<endl;
		cout<<"所属学院: "<<s[i].c<<endl;
		cout<<"专业: "<<s[i].m<<endl;
		cout<<"年级: "<<s[i].g<<endl;
		cout<<endl;
		j=1;
	}
	if(j==0)
	{
		cout<<endl;
		cout<<"无学生信息!"<<endl;
		cout<<endl;
	}
	cout<<"学生总数:"<<n<<endl;
}
void sim::insert(sim s[],int n,int n1)//插入学生信息
{                                         //      0 1 2                                 0 1 2 3
	for(int i=n-2;i>=n1-1;i--)//ex: 有3个学生信息:a,b,c要将d学生的信息插入到1号位置,则为a d b c   .(用户输入的1代表0,2代表1,即用户输入i,这里对应的下标应为i-1)
	{
		strcpy(s[i+1].sname,s[i].sname);
		strcpy(s[i+1].name,s[i].name);
		strcpy(s[i+1].sex,s[i].sex);
		strcpy(s[i+1].bd,s[i].bd);
		strcpy(s[i+1].c,s[i].c);
		strcpy(s[i+1].m,s[i].m);
		strcpy(s[i+1].g,s[i].g);
	}
		i+=1;//总长+1
		cout<<"请输入学号"<<endl;
		cin>>s[i].sname;
		cout<<"请输入姓名"<<endl;
		cin>>s[i].name;
		cout<<"请输入性别"<<endl;
		cin>>s[i].sex;
		cout<<"请输入出生日期"<<endl;
		cin>>s[i].bd;
		cout<<"请输入所属学院"<<endl;
		cin>>s[i].c;
		cout<<"请输入所属专业"<<endl;
		cin>>s[i].m;
		cout<<"请输入年级"<<endl;
		cin>>s[i].g;

}
void sim::del(sim s[],int n,int n2)
{
	for(int i=n2-1;i<n;i++){
			{
				strcpy(s[i].sname,s[i+1].sname);
				strcpy(s[i].name,s[i+1].name);
				strcpy(s[i].sex,s[i+1].sex);
				strcpy(s[i].bd,s[i+1].bd);
				strcpy(s[i].c,s[i+1].c);
				strcpy(s[i].m,s[i+1].m);
				strcpy(s[i].g,s[i+1].g);
			}
	}

}
void sim::find1(sim s[],int n,char f[])//查询方法1
{
	int j=0;
	for(int i=0;i<n;i++)
	{
		if(!strcmp(s[i].sname,f))
		{
			cout<<"学号: "<<s[i].sname<<endl;
			cout<<"姓名: "<<s[i].name<<endl;
			cout<<"性别: "<<s[i].sex<<endl;
			cout<<"出生日期: "<<s[i].bd<<endl;
			cout<<"所属学院: "<<s[i].c<<endl;
			cout<<"专业: "<<s[i].m<<endl;
			cout<<"年级: "<<s[i].g<<endl;
			cout<<endl;
			j=1;
		}
	
	}
	if(j==0)
	{
		cout<<endl;
		cout<<"无该学生信息!"<<endl;
		cout<<endl;
	}
}
void sim::find2(sim s[],int n,char f[])//查询方法2
{
	int j=0;
	for(int i=0;i<n;i++)
	{
		if(!strcmp(s[i].name,f))
		{
			cout<<"学号: "<<s[i].sname<<endl;
			cout<<"姓名: "<<s[i].name<<endl;
			cout<<"性别: "<<s[i].sex<<endl;
			cout<<"出生日期: "<<s[i].bd<<endl;
			cout<<"所属学院: "<<s[i].c<<endl;
			cout<<"专业: "<<s[i].m<<endl;
			cout<<"年级: "<<s[i].g<<endl;
			cout<<endl;
			j=1;
		}
	
	}
	if(j==0)
	{
		cout<<endl;
		cout<<"无该学生信息!"<<endl;
		cout<<endl;
	}
}
void sim::find3(sim s[],int n,char c[])//查询方法3
{
	int k=0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<strlen(s[i].name);j++)
		{
			if(c[0]==s[i].name[j])//ex: 模糊查找输入了一个字:森;s[i].name="黄逸森",则会用森字分别和黄,逸,森,三个字进行比较,符合则输出
			{
				cout<<"学号: "<<s[i].sname<<endl;
				cout<<"姓名: "<<s[i].name<<endl;
				cout<<"性别: "<<s[i].sex<<endl;
				cout<<"出生日期: "<<s[i].bd<<endl;
				cout<<"所属学院: "<<s[i].c<<endl;
				cout<<"专业: "<<s[i].m<<endl;
				cout<<"年级: "<<s[i].g<<endl;
				cout<<endl;
				k=1;
			}
		}
	}
	if(k==0)
	{
		cout<<endl;
		cout<<"无该学生信息!"<<endl;
		cout<<endl;
	}
}
void write(sim s[],int n)//将数据写入文件
{	
	FILE *fp;
	fp=fopen("F:\\Students_Information.txt","w");
	for(int i=0;i<n;i++)
	{
		fputs("学号: ",fp);
		fputs(s[i].sname,fp);
		fputs("\n",fp);
		fputs("姓名: ",fp);
		fputs(s[i].name,fp);
		fputs("\n",fp);
		fputs("性别: ",fp);
		fputs(s[i].sex,fp);
		fputs("\n",fp);
		fputs("出生日期: ",fp);
		fputs(s[i].bd,fp);
		fputs("\n",fp);
		fputs("所属学院: ",fp);
		fputs(s[i].c,fp);
		fputs("\n",fp);
		fputs("专业: ",fp);
		fputs(s[i].m,fp);
		fputs("\n",fp);
		fputs("年级: ",fp);
		fputs(s[i].g,fp);
		fputs("\n",fp);
		fputs("\n",fp);
	}
}
void maopao(sim s1[],int n)
{
	sim s2[5];
	for(int i=0;i<n-1;i++)
		for(int j=0;j<n-1-i;j++)
		{
			if(strcmp(s1[j].sname,s1[j+1].sname)>0)
			{
				s2[0]=s1[j];
				s1[j]=s1[j+1];
				s1[j+1]=s2[0];
			}
		}
}
int erfen(sim s1[],char f[],int n)//二分查找
{
	int l=0,r=n-1,m;
	while(l<=r)
	{
		m=(l+r)/2;
		if(strcmp(f,s1[m].sname)>0)
			l=m+1;
		else if(strcmp(f,s1[m].sname)<0)
			r=m-1;
		else
			return m;
	}
	return -1;
}
void main()
{
	sim s,s1
;
	int n,m,n1,n2;
	cout<<"请输入你要输入的学生总数"<<endl;
	cin>>n;
	while(1)
	{
		cout<<"功能如下:"<<endl;
		cout<<"         1.输入学生数据(重复运行这步会把数据覆盖。)"<<endl;
		cout<<"         2.添加学生"<<endl;
		cout<<"         3.删除指定学生数据"<<endl;
		cout<<"         4.查询指定学生数据"<<endl;
		cout<<"         5.显示所有学生数据"<<endl;
		cout<<"         6.结束输入,并将数据写入到文件 (Path:F:\\Students_Information.txt) "<<endl;
		cout<<"         7.按学号进行升序排序"<<endl;
		cin>>m;
		if(m==1)
		{	
			cout<<"!!!!!Attentions:学号不能重复!!!!"<<endl;
			s.init(s1,n);
		}
		else if(m==2)
		{	n+=1;
			cout<<"插入到第几个学生?"<<endl;
			cin>>n1;
			s.insert(s1,n,n1);
		}
		else if(m==3)
		{	
			cout<<"你想删除哪一个学生的信息?"<<endl;
			cin>>n2;
			s.del(s1,n,n2);
			n-=1;
		}
		else if(m==4)
		{
			int i,j=0;
			char f[30],c[1];
			cout<<"查询方式:"<<endl;
			cout<<"         1.输入学号查找."<<endl;
			cout<<"         2.输入姓名查找."<<endl;
			cout<<"         3.模糊查找,如输入“刘”,可以查找到所有姓名中有“刘”字的学生的基本信息."<<endl;
			cin>>i;
			if(i==1)
			{
				cout<<"请输入要查询的学号"<<endl;
				cin>>f;
			/*  j=erfen(s1,f,n);//若要用二分查找,则将注释去掉即可
				if(j==-1)
				cout<<"无该学生信息!"<<endl;
				else
				{
					cout<<"学号: "<<s[j].sname<<endl;
					cout<<"姓名: "<<s[j].name<<endl;
					cout<<"性别: "<<s[j].sex<<endl;
					cout<<"出生日期: "<<s[j].bd<<endl;
					cout<<"所属学院: "<<s[j].c<<endl;
					cout<<"专业: "<<s[j].m<<endl;
					cout<<"年级: "<<s[j].g<<endl;
					cout<<endl;
				}*/
				s.find1(s1,n,f);
			}
			else if(i==2)
			{
				cout<<"请输入要查询的姓名"<<endl;
				cin>>f;
				s.find2(s1,n,f);
			}
			else if(i==3)
			{
				cout<<"请输入要查询学生姓名中含有的一个字"<<endl;
				cin>>c;
				s.find3(s1,n,c);
			}
		}
		else if(m==5)
		{
			s.show(s1,n);
		}
		else if(m==6)
		{
			write(s1,n);
			break;
		}
		else if(m==7)
		{
			maopao(s1,n);
		}
	}

	
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: