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

📄 stu_info_manager.cpp

📁 清华大学版的数据结构教材后面的课设题
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
//************************************************************
//*******************课程信息*********************************
//************************************************************

	typedef struct{
		char course_name[10];
		float point;
		char teacher[20];
	}course;

//************************************************************
//*********************学生信息*******************************
//************************************************************
	typedef struct{
		long int number;
		char name[20];
		int age;
		char sex[10];
		course course_number[2];
	}student;


//************************************************************
//*********************哈希关键函数***************************
//************************************************************

	long int key_1(long int number){
		number=number%10000;
		number=number%11;
		return number;
	}

//************************************************************
//****************确认出入是否满足条件函数********************
//************************************************************

	void confirm(char j){
		for(;j!='y'&&j!='Y'&&j!='n'&&j!='N';){
	     cout<<"--|||请输入Y/N,谢谢:\n.";
			cin>>j;
		}
	} 

//************************************************************
//********************显示学生信息函数************************
//************************************************************

void showinformation(student *information){
	cout<<"学号: "<<information->number<<endl;
	cout<<"姓名: "<<information->name<<endl;
	cout<<"年龄: "<<information->age<<endl;
    cout<<"性别: "<<information->sex<<endl;
	cout<<"第一科课程名: "<<information->course_number[0].course_name<<endl;
	cout<<"第一科课程分数: "<<information->course_number[0].point<<endl;
	cout<<"第一科课程任课老师: "<<information->course_number[0].teacher<<endl;
    cout<<"第二科课程名: "<<information->course_number[1].course_name<<endl;
	cout<<"第二科课程分数: "<<information->course_number[1].point<<endl;
	cout<<"第二科课程任课老师: "<<information->course_number[1].teacher<<endl;
}

//************************************************************
//*********************检测学号是否重复***********************
//************************************************************

void examenumber(long int number,student *information){
	int n;
	for(n=0;n!=100;n++){
		if(information[n].number==number){
			cout<<"=.=你输入的学号已存在,请重新输入:\n";
			cin>>number;
			n=-1;
		}
	}
}

//************************************************************
//******************初始读入数据构建哈希表********************
//************************************************************

void firstread(	student *information)
{
	fstream datafile;
	long int number,key;
	datafile.open("first.txt",ios::in|ios::out);
	if(!datafile){
		cout<<"\n";
		exit(0);
	}
	while(!datafile.eof()){
		    datafile>>number;
			key=key_1(number);
           while(information[key].number!=0){
				key++;
				}
		   if(key>=100){
				cout<<"所建立的哈希表有误!请注意啦!\n";
				abort();
		   }
			information[key].number=number;
			datafile>>information[key].name;
			datafile>>information[key].age;					 		
			datafile>>information[key].sex;	
			datafile>>information[key].course_number[0].course_name;
			datafile>>information[key].course_number[0].point;
			datafile>>information[key].course_number[0].teacher;
			datafile>>information[key].course_number[1].course_name;
			datafile>>information[key].course_number[1].point;
			datafile>>information[key].course_number[1].teacher;
	}		
	datafile.close();
}

//************************************************************
//*************关闭程序时将学生信息重新写入文件***************
//************************************************************

void closedatafile(student *information){
	fstream datafile;
	int n;
	datafile.open("first.txt",ios::out);

    for(n=0;n!=100;n++){
		if(information->number!=0){
         	datafile<<information->number<<' ';
			datafile<<information->name<<' ';
			datafile<<information->age<<' ';
			datafile<<information->sex<<' ';
			datafile<<information->course_number[0].course_name<<' ';
			datafile<<information->course_number[0].point<<' ';
			datafile<<information->course_number[0].teacher<<' ';
			datafile<<information->course_number[1].course_name<<' ';
			datafile<<information->course_number[1].point<<' ';
			datafile<<information->course_number[1].teacher;			
			information++;
			n++;
			break;
		}
		information++;
	}
	for(;n!=100;n++){
		if(information->number!=0){
			datafile<<"\n";
         	datafile<<information->number<<' ';
			datafile<<information->name<<' ';
			datafile<<information->age<<' ';
			datafile<<information->sex<<' ';
			datafile<<information->course_number[0].course_name<<' ';
			datafile<<information->course_number[0].point<<' ';
			datafile<<information->course_number[0].teacher<<' ';
			datafile<<information->course_number[1].course_name<<' ';
			datafile<<information->course_number[1].point<<' ';
			datafile<<information->course_number[1].teacher;
		}
       information++;		
	}
	datafile.close();
}	
void main()
{
    int n,s,l,t,p,q;
	char name[20],j,i,m,k;
	int age;
	char sex[10];
	long int number,key;
	char course_name_1[10],course_name_2[10];
	float point_1,point_2;
	char teacher_1[20],teacher_2[20];
	student *information,*information_1;
    information_1=(student*)malloc(100*sizeof(student));
	information=(student*)malloc(100*sizeof(student));
	for(n=0;n!=100;n++){
		information[n].number=0;
	}
	firstread(information);
    step_1: system("cls");
	cout<<"\n\n*******************学生信息管理系统**************************\n\n\n";
	cout<<"1:学生信息数据处理系统\n\n";
	cout<<"2:学生信息查询系统\n\n";
	cout<<"3:学生信息排序系统\n\n";
	cout<<"4:学生信息统计系统\n\n";
	cout<<"5:退出系统\n\n";
	cout<<"请输入您想要进入的模块号:";
	cin>>i;
	for(;i!='1'&&i!='2'&&i!='3'&&i!='4'&&i!='5';){
		cout<<"--|||麻烦输入1~5之间的数,谢谢合作:\n";
		cin>>i;
	}
	switch(i){
         case '1': step_2: system("cls");
			       cout<<"\n\n****************欢迎进入学生信息处理系统*****************\n\n\n";
			       cout<<"1:添加学生信息\n\n";
				   cout<<"2:修改学生信息\n\n";
				   cout<<"3:删除学生信息\n\n";
                   cout<<"4:返回上一级\n\n";
				   cout<<"请输入您想要进行操作的序号:\n\n";
				   cin>>j;
	               for(;j!='1'&&j!='2'&&j!='3'&&j!='4';){
		               cout<<"--|||麻烦输入1~4之间的数,谢谢合作:\n";
		              cin>>j;
				   }
				   switch(j){
				        case '1': step_3: system("cls");
							      cout<<"请输入您要添加学生的学号:\n";
								  cin>>number;
								  examenumber(number,information);
								  cout<<"请输入此学生的姓名:\n";
								  cin>>name;
								  cout<<"请输入此学生的年龄:\n";
								  cin>>age;
								  cout<<"请输入此学生的性别:\n";
								  cin>>sex;
								  cout<<"请输入此学生第一科课程名:\n";
								  cin>>course_name_1;
								  cout<<"请输入此课程的成绩:\n";
								  cin>>point_1;
								  cout<<"请输入此课程的任课老师:\n";
								  cin>>teacher_1;
								  cout<<"请输入此学生第二科课程名:\n";
						          cin>>course_name_2;
								  cout<<"请输入此课程的成绩:\n";
								  cin>>point_2;
								  cout<<"请输入此课程的任课老师:\n";
								  cin>>teacher_2;
								  key=key_1(number);
								  while(information[key].number!=0){
				                        key++;
								  }
								  if(key>=100){
				                     cout<<"所建立的哈希表有误!请注意啦!\n";
									 abort();
								  }
								  information[key].number=number;
								  strcpy(information[key].name,name);
								  information[key].age=age;
							      strcpy(information[key].sex,sex);
							      strcpy(information[key].course_number[0].course_name,course_name_1);
								  information[key].course_number[0].point=point_1;
								  strcpy(information[key].course_number[0].teacher,teacher_1);
								  strcpy(information[key].course_number[1].course_name,course_name_2);
                                  information[key].course_number[1].point=point_2;
								  strcpy(information[key].course_number[1].teacher,teacher_2);
								  cout<<"添加成功,是否继续添加(Y/N):\n";
								  cin>>m;
								  confirm(m);
								  if(m=='y'||m=='Y')
									  goto step_3;
								  else goto step_2;
						case '2': step_4: system("cls");
							      cout<<"请输入您要修改信息学生的学号:\n";
								  cin>>number;
								  for(n=0;n!=100;n++){
									  if(information[n].number==number){
										  cout<<"您要修改学生的原始信息:\n\n";
										  showinformation(&information[n]);
										  break;
									  }
								  }
								  if(n>=100){
									  cout<<"-.=|||很抱歉,未能找到您要修改学生的信息,是否继续修改其他学生信息(Y/N):\n";
									  cin>>m;
									  confirm(m);
									  if(m=='y'||m=='Y')
										  goto step_4;
									  else goto step_2;
								  }
								  else {
                                      step_5: cout<<endl<<"1.学号 2.姓名 3.年龄 4.性别\n\n";
									  cout<<"5.第一科课程名 6.第一科课程分数 7.第一科课程任课老师\n\n";
									  cout<<"8.第二科课程名 9.第二科课程分数 10.第二科课程任课老师\n\n";

⌨️ 快捷键说明

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