一个简单的C++课程设计 学生信息管理系统

C++课程设计(上)

题目:
学生信息管理系统

需求及功能要求:
学生的基本信息:
学号、姓名、年龄、性别、出生年月等
功能:
(1)录入学生信息;
(2)显示学生信息;
(3)修改学生信息;
(4)删除学生信息;
(5)按学号查询学生信息;
(6)按学号对学生信息进行排序;
(7)保存文件;

**环境:**win10+Microsoft Visual Studio 2010

程序实现代码:

#include<iostream>
#include<iomanip>
#include <Windows.h>
#include<fstream>
#include<cstring>
#define Shu 100
using namespace std; 
struct student
{
    int num;
    char name[20];
    int age;
    char sex[6];
	char addr[20];
}x[Shu];
int iFile(struct student b[Shu],int &i,int &z)//向内存写入文件
{
	int j;
	ifstream file1,file2;
	file2.open("Ordinal.txt",ios::in);
	file2>>z;
	i=z;
	if(z==0)
		return 1;
	file1.open("information.txt",ios::in);
	for(j=0;j<i;j++)
	{
		file1>>b[j].num;
		file1>>b[j].name;
		file1>>b[j].age;
		file1>>b[j].sex;
		file1>>b[j].addr;
	}
	file1.close();return 1;
}
void oFile(struct student b[Shu],int i,int z)//向硬盘写入文件
{
	int j;
	ofstream file1,file2;//利用ofstream类的构造函数创建一个文件输出流对象来打开文件
	file2.open("Ordinal.txt",ios::out);
	file2<<i;
	file1.open("information.txt",ios::out|ios::app);
	for(j=z;j<i;j++)
	{
		file1<<b[j].num<<endl;
		file1<<b[j].name<<endl;
		file1<<b[j].age<<endl;
		file1<<b[j].sex<<endl;
		file1<<b[j].addr<<endl;
	}
	file1.close();
}
void oFile1(struct student b[Shu],int i)
{
	int j;
	ofstream file1,file2;
	file2.open("Ordinal.txt",ios::out);
	file2<<i;
	file1.open("information.txt",ios::out);
	for(j=0;j<i;j++)
	{
		file1<<b[j].num<<endl;
		file1<<b[j].name<<endl;
		file1<<b[j].age<<endl;
		file1<<b[j].sex<<endl;
		file1<<b[j].addr<<endl;
	}
	file1.close();
}
int _Input(struct student b[Shu],int &i,int z)// 1.录入学生信息
{
	int j=0;
    char a;
    for(i=z;i<Shu;)
    {
		cout<<"==================================="<<endl;
        cout<<"输入该学生的学号:";
		cin>>b[i].num;
        cout<<"输入该学生的姓名(英文):";
		cin>>b[i].name;
        cout<<"输入该学生的年龄:";
		cin>>b[i].age;
		while(1)
		{
        cout<<"输入该学生的性别(man/woman):";
		cin>>b[i].sex;
		if(strcmp(b[i].sex,"man")==0||strcmp(b[i].sex,"woman")==0)
			break;
		else
			cout<<"您输入的信息有误!请输入 man 或 woman 。"<<endl;
		}
		cout<<"输入该学生的地址(省份和市):";
		cin>>b[i].addr;
		cout<<"===================================="<<endl;
        cout<<"您是否要继续输入(y/n) :";
		i++;
        while(1)
        {
		cin>>a;
        if(a=='y'||a=='Y')
		{
		   system("cls");
           break;
		}
           if(a=='n'||a=='N')
		   { 
			   system("cls");
			return 1;
		   }
        else
		{
			cout<<"您输入的数据有误,请重新输入(y/n):"<<endl;
		}
        }

    }
 return 1;
}
int _Modify(struct student b[Shu],int i)//修改学生信息
{
    int j,k;
	char a;
	while(1)
	{cout<<"=========================================================================================="<<endl;
    cout<<"学生信息为:"<<endl;
    cout<<"序数\t\t学       号|\t|姓       名|\t|年       龄|\t|性       别|\t|地       址(省份和市)|"<<endl;
    for(j=0;j<i;j++)
		cout<<setw(2)<<j+1<<"\t\t"<<setw(11)<<b[j].num<<"\t"<<setw(12)<<b[j].name<<"\t"<<setw(12)<<b[j].age<<"\t"<<setw(12)<<b[j].sex<<"\t"<<setw(22)<<b[j].addr<<endl;
	cout<<"=========================================================================================="<<endl;
		cout<<"请输入需要修改的学生的序数或返回主页面(序数/0)"<<endl;
        cin>>k;
		if(k==0)
		{
			system("cls");
			return 1;
		}
		if(k>0&&k<i)
		
		{
		cout<<"请输入修改后该学生的学号:";
		cin>>b[k-1].num;
        cout<<"请输入修改后该学生的姓名(英文):";
		cin>>b[k-1].name;
        cout<<"请输入修改后该学生的年龄:";
		cin>>b[k-1].age;
		while(1)
		{
        cout<<"请输入该学生的性别(man/woman):";
		cin>>b[k-1].sex;
		if(strcmp(b[k-1].sex,"man")==0||strcmp(b[k-1].sex,"woman")==0)
			break;
		else
			cout<<"您输入的信息有误!请输入 man 或 woman 。"<<endl;
		}
		cout<<"请输入该学生的地址(省份和市):";
		cin>>b[k-1].addr;
		system("cls");
        cout<<"修改后的";
		}
		else
		{
			cout<<"没有此序号!回复任意字符返回:";
			cin>>a;
			system("cls");
		}
	}
 
}
int _Delete(struct student b[Shu],int &i)//删除学生信息
{
	int j,k;
	while(1)
	{cout<<"=========================================================================================="<<endl;
    cout<<"学生信息为:"<<endl;
    cout<<"序数\t\t学       号|\t|姓       名|\t|年       龄|\t|性       别|\t|地       址(省份和市)|"<<endl;
    for(j=0;j<i;j++)
		cout<<setw(2)<<j+1<<"\t\t"<<setw(11)<<b[j].num<<"\t"<<setw(12)<<b[j].name<<"\t"<<setw(12)<<b[j].age<<"\t"<<setw(12)<<b[j].sex<<"\t"<<setw(22)<<b[j].addr<<endl;
	cout<<"=========================================================================================="<<endl;
		cout<<"请输入需要消除的学生的序数或返回主页面(序数/0)"<<endl;
		while(1)
		{
        cin>>k;
		if(k==0)
		{
			system("cls");
			oFile1(b,i);
			return 1;
		}
		if(k>i)
		cout<<"您输入的信息有误!请重新输入(序数/0):";
		else
		{
			for(;k<=i;k++)
			b[k-1]=b[k];
            i--;
		    system("cls");
            cout<<"修改后的";
			break;
		}
		}		
	}
}
int _Query(struct student b[Shu],int i)//通过学号查询学生信息
{ 
	 int a,j;
	 char c;
	 while(1)
	 {
     cout<<"请输入您需要查询的学生的学号:"<<endl;
	 cin>>a;
	 for(j=0;j<i;j++)
		 if(a==b[j].num)
	 {
		 cout<<"=========================================================================================="<<endl;
		 cout<<"该学生的"<<endl;
		 cout<<"序数\t\t学       号|\t|姓       名|\t|年       龄|\t|性       别|\t|地       址(省份和市)|"<<endl;
		 cout<<setw(2)<<j+1<<"\t\t"<<setw(11)<<b[j].num<<"\t"<<setw(12)<<b[j].name<<"\t"<<setw(12)<<b[j].age<<"\t"<<setw(12)<<b[j].sex<<"\t"<<setw(22)<<b[j].addr<<endl;
		 break;
	 }
		 cout<<"=========================================================================================="<<endl;
	 if(j==i)
		cout<<"没有查询到该有关学号的信息。"<<endl;
	 cout<<"是否需要继续查询(y/n)"<<endl;
	  while(1)
        {
		cin>>c;
        if(c=='y'||c=='Y')
		{
			system("cls");
			break;
		}
           if(c=='n'||c=='N')
		   {
				system("cls");
				return 1;
		   }
        else
		{
        cout<<"您输入的数据有误,请重新输入(y/n):"<<endl;
		continue;
		}
        }
	 }

}
int _Display(struct student b[Shu],int i)//显示当前学生信息
{
	char z;
	int j;
	cout<<"=========================================================================================="<<endl;
	cout<<"序数\t\t学       号|\t|姓       名|\t|年       龄|\t|性       别|\t|地       址(省份和市)|"<<endl;
    for(j=0;j<i;j++)
		cout<<setw(2)<<j+1<<"\t\t"<<setw(11)<<b[j].num<<"\t"<<setw(12)<<b[j].name<<"\t"<<setw(12)<<b[j].age<<"\t"<<setw(12)<<b[j].sex<<"\t"<<setw(22)<<b[j].addr<<endl;
	cout<<"回复任意键返回:";
	cin>>z;
	system("cls");
	return 1;
}
int _Sort(struct student b[Shu],int i)//冒泡排序
{
	int j,t;
	struct student x1;
	for(j=0;j<i;j++)
	{	
		for(t=0;t<i-j-1;t++)
		{
			if(b[t].num>b[t+1].num)
			{
			x1=b[t];
			b[t]=b[t+1];
			b[t+1]=x1;
			}
		}
	}
	cout<<"排序后:"<<endl;_Display(b,i);return 1;
}
int main()
{
    int i,z=0;
	char a,c;
	iFile(x,i,z);
    while(1)
    {
    cout<<"**************学生信息管理系统**************"<<endl;
    cout<<"               1.录入学生信息"<<endl;
	cout<<"               2.显示当前学生信息"<<endl;
    cout<<"               3.修改学生信息"<<endl;
    cout<<"               4.删除学生信息"<<endl;
    cout<<"               5.按学号查询学生信息"<<endl;
	cout<<"               6.按学号排序"<<endl;
	cout<<"               7.保存文件"<<endl;
    cout<<"               8.退出管理系统"<<endl;
    cout<<"********************************************"<<endl;
    cout<<"请选择序号:"<<endl;
    cin>>a;
    switch(a)
	{
    case '1':system("cls");_Input(x,i,z);oFile(x,i,z);break;
	case '2':system("cls");_Display(x,i);break;
    case '3':system("cls");_Modify(x,i);break;
    case '4':system("cls");_Delete(x,i);break;
    case '5':system("cls");_Query(x,i);break;
	case '6':system("cls");_Sort(x,i);oFile1(x,i);break;
	case '7':system("cls");oFile1(x,i);cout<<"以保存,输入任意字符返回主菜单:";cin>>c;system("cls");break;
    case '8':exit(0);
    default:system("cls");cout<<"您输入的序号有误!\n输入任意字符返回主菜单";cin>>c;system("cls");
	}}
    return 0;
}

项目截图:
主页面:
主页面
显示页面:
显示页面

  • 14
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、问题描述  学生信息包括:学号、姓名、性别、年龄、班级等信息。  小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。  中学生除了包括小学生所有信息外,还包括地理、历史成绩、家庭住址等信息。 大学生除了包括学生所有信息外,还包括专业、家庭地址、联系方式等信息。  2、功能要求  (1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。  (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。  (3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。  (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。  (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。  (6)统计功能:能根据多种参数进行统计。能统计学生人数、按性别统计、按年龄统计等。  (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。  (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值