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

📄 学生成绩管理系统.cpp

📁 这是一个用C++实现的简单的学生成绩管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//
#include "address.h"
void main()
{
	int choice;
	while (1)
	{
		cout<<"\n\n";
		dis_char(' ',15);
		cout<<"学生成绩管理系统\n";
		dis_char('*',40);
		cout<<endl;
		dis_char(' ',15);
		cout<<"1.信息录入功能\n";
		dis_char(' ',15);
		cout<<"2.信息查询功能\n";
		dis_char(' ',15);
		cout<<"3.信息修改功能\n";
		dis_char(' ',15);
		cout<<"4.信息删除功能\n"; 
		dis_char(' ',15);
		cout<<"5.信息浏览功能\n";
		dis_char(' ',15);
		cout<<"6.信息文件建立功能\n";
		dis_char(' ',15);
		cout<<"7.退出管理系统程序\n";
		dis_char('*',40);
		cout<<endl;
		dis_char(' ',15);
		cout<<"请输入代码选择(1-7)\n";
		cin>>choice;
		switch(choice)
		{
			case 1:
				append();
				break;
			case 2:
				locate();
				break;
			case 3:
				modify();
				break;
			case 4:
				dele();
				break;
			case 5:
				display();
				break;
			case 6:
				create();
				break;
			case 7:
				return;
			default :
				cout<<"输入数字不在范围之内,请重试\n";
				continue;
		}
	}
}

//0.1显示字符串函数
void dis_char(char ch,int n)
{
	int i;
	for(i=0;i<n;i++)
		cout<<ch;
}
//0.2打印单个结构函数
void dis_row(record score)
{
	cout<<setw(20)<<score.name<<setw(12)<<score.number
		<<setw(6)<<score.Chinese<<setw(6)<<score.Math
		<<setw(6)<<score.English<<setw(6)<<score.total
		<<setw(9)<<score.average<<endl;

}
//0.3显示一行表头的函数
void dis_table()
{
	dis_char(' ',16);
	cout << " 姓名";
	dis_char(' ',8);
	cout << "学号";
	dis_char(' ',2);
	cout << "语文";
	dis_char(' ',2);
	cout << "数学";
	dis_char(' ',2);
	cout << "英语";
	dis_char(' ',2);
	cout << "总分   平均分";
	cout << endl;
}

//1 录入学生信息函数
void append()
{
	record score;
	FILE *fp;
	char ask;
	if((fp=fopen("address.txl","ab"))==NULL)
	{
		cout<<"can't open file!\n";
			return;
	}

	while(1)
	{
		cout<<"\n\n";
		cout<<"输入学生信息\n";
		cout<<"姓名: ";
		cin>>score.name;
		cout<<"\n学号: ";
		cin>>score.number;
		cout<<"\n语文成绩: ";
		cin>>score.Chinese;
		cout<<"\n数学成绩: ";
		cin>>score.Math;
		cout<<"\n英语成绩: ";
		cin>>score.English;
		
		score.total=score.Chinese+score.Math+score.English;
		score.average=(score.total*1.0)/3;
		
		fwrite(&score,sizeof(record),1,fp);//
		
		cout<<"\n继续输入记录吗(y/n) ";
		cin>>ask;
		if(ask!='y'&& ask!='Y')
			break;
	}
	fclose(fp);
	return;
}

//2 查询学生信息函数
void locate()
{
	record temp,score[M];
	char name[20];
	int n=0;
	int i,flag,ask,d_total;
	FILE * fp;
	if((fp=fopen("address.txl","rb"))==NULL)
	{
		cout << "can't open file!" << endl;
		return;
	}
	while(fread(&temp,sizeof(record),1,fp)==1)//读通讯录文件
	     score[n++]=temp;
	
	while(1)
	{
		d_total=0;
		flag=0;
		cout<<"\n\n";
		dis_char(' ',10);
		cout<<"查找学生信息\n";
		dis_char('*',40);
		
		cout<<endl;
		dis_char(' ',10);
		cout<<"1-按姓名查找\n";
		dis_char(' ',10);
		cout<<"2-按学号查找\n";
		dis_char(' ',10);
		cout<<"3-按平均分查找\n";
		dis_char(' ',10);
		cout<<"4-查找一门课程信息\n";
		dis_char(' ',10);
		cout<<"5-返回上一层\n";
		dis_char('*',40);
		
		cout<<endl;
		dis_char(' ',10);
		
		cout<<"请输入号码选择(1-5)\n";
		cin>>ask;
		
	   switch(ask)
	   {
	     case 1:
			cout<<"请输入要查询的姓名: ";
			cin>>name;
			for(i=0;i<n;i++)
			{
				if(strcmp(name,score[i].name)==0)
				{
					flag=1;
					dis_table();
					dis_row(score[i]);
				}
			}
		    if(!flag)
			   cout<<"没有找到符合条件的记录!\n";
			break;
		
		 case 2:
			int num;
			cout<<"请输入要查询的学号: ";
			cin>>num;
			for(i=0;i<n;i++)
			{
				if(num==score[i].number)
				{
					flag=1;
					dis_table();
					dis_row(score[i]);
				}
			}
		    if(!flag)
			   cout<<"没有找到符合条件的记录!\n";
			break;
		
		  case 3:
			  int num1,num2;
			  cout<<"请输入要查询的平均分分数段(如80-90只输入数字80 90): ";
			  cin>>num1>>num2;
			  for(i=0;i<n;i++)
			  {
				if(num1<score[i].average && num2>score[i].average)
				{
					flag=1;
					dis_table();
					dis_row(score[i]);
				}
			  }
		      if(!flag)
			     cout<<"没有找到符合条件的记录!\n";
			  break;
		 
		 case 4:
			 int kechen;
			 cout<<"请输入要查询的科目(如语文输入1数学输入2英语输入3): ";
			 cin>>kechen;
		     switch(kechen)
			 {
				 
				 case 1:
					 flag=1;
					 cout<<"\n语文";
					 for(i=0;i<n;i++)
					 {
						 cout<<setw(18)<<score[i].name<<setw(5)<<score[i].Chinese;
						 d_total+=score[i].Chinese;
					 }
					 cout<<" 总平均分 "<<setw(6)<<(d_total*1.0/n);
					 break;
			     case 2:
					 flag=1;
					 cout<<"\n数学";
					 for(i=0;i<n;i++)
					 {
						 cout<<setw(18)<<score[i].name<<setw(5)<<score[i].Math;
						 d_total+=score[i].Math;
					 }
					 cout<<" 总平均分 "<<setw(6)<<(d_total*1.0/n);
					 break;
			     case 3:
					 flag=1;
					 cout<<"\n英语";
					 for(i=0;i<n;i++)
					 {
						 cout<<setw(18)<<score[i].name<<setw(5)<<score[i].English;
						 d_total+=score[i].English;
					 }
					 cout<<" 总平均分 "<<setw(6)<<(d_total*1.0/n);
					 break;
				default:
					cout<<"输入错误,请重试";
					break;
			 }
			 break;
		 case 5:
			return;
		 default :
				cout<<"输入数字不在范围之内,请重试\n";
				continue;
	   }
	}
	return;
}

//3 修改功能函数
void modify()
{
	char point;
	int ask;
	record temp,score[M];
	FILE * fp;
	int i=0;
	if((fp=fopen("address.txl","rb"))==NULL)
	{
		cout << "can't open file!" << endl;
		return;
	}
	while(fread(&temp,sizeof(record),1,fp)==1)//读系统文件
	{
		score[i++]=temp;
	}
	while(1)
	{
		cout << "\n";
		dis_char(' ',20);
		cout << "编辑修改信息录" << endl;
		dis_char('*',50);
		cout << endl;
		dis_char(' ',17);
		cout << "1.浏览显示信息录\n";
		dis_char(' ',17);
		cout << "2.按姓名修改信息录\n";
		dis_char(' ',17);
		cout << "3.按学号修改信息录\n";
		dis_char(' ',17);
		cout << "4.返回上一层\n";
		dis_char('*',50);
		cout << endl;
		dis_char(' ',16);
		cout << "请输入号码选择(1~3) ";  
		cin >> ask;  
		switch(ask)
		{
		  
		  case 1:
			dis_all(score,i);//调用显示数组函数
			break;
		  case 2:
			mod_name(score,i);//调用编辑按姓名修改函数
			break;
		  case 3:
			mod_num(score,i);//调用按学号编辑修改函数
			break;
		  case 4 :
			break;
		  default :
				cout<<"输入数字不在范围之内,请重试\n";
				continue;
		}
		cout << "继续修改请按y键,否则按其他键......";
		cin >> point;
		if(point!='y'  && point!= 'Y' )
			break;
	}
	fclose(fp);
	fp=fopen("address.txl","wb");
	fwrite(score,sizeof(record),i,fp);//将修改后的数据写回到通讯录文件
	fclose(fp);
	return;
}

//3.1按姓名编辑修改函数
void mod_name(record score[],int n)
{
	int i,flag;
	char name[20];
	while(1)
	{
		flag=0;    //查找标志,查找成功flag=1
		cout << "\n请输入姓名: ";
		cin >> name;
		for(i=0;i<n;i++)
		{
			if(strcmp(name,score[i].name)==0)
			{
				flag=1;
				cout << "当前要修改的记录信息:\n";
				dis_table();
				dis_row(score[i]);
				cout << "请重新输入以下信息:\n";
				cout<<"姓名: ";
		        cin>>score[i].name;
		        cout<<"\n学号: ";
				cin>>score[i].number;
				cout<<"\n语文成绩: ";
				cin>>score[i].Chinese;
				cout<<"\n数学成绩: ";

⌨️ 快捷键说明

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