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

📄 sdatabase.cpp

📁 一个简单的学生管理系统 用c++编写 实现包括填加.删除等基本功能
💻 CPP
字号:
#include <iostream.h>
#include <string.h>
#include <fstream.h>
#include <iomanip.h>
#include "SDatabase.h"

SDatabase::SDatabase()                           //构造函数,将stud.txt读到student[]中
{
    Stud s;
	top=-1;
	fstream file("stud.txt",ios::in);
	while(1)
	{
		file.read((char *)&s,sizeof(s));
		if (!file) break;
		top++;
		student[top]=s;
	}
	file.close();
}

void SDatabase::clear()                          //删除所有学生信息
{
	top=-1;
}


int SDatabase::addstudent(char *n,char *na,char *s,char *m,char *a,char *b)   //添加学生时先查找是否存在
{
	Stud *p=query(n);
	if(p==NULL)
	{
		top++;
		student[top].addstudent(n,na,s,m,a,b);
		return 1;
	}
	else
	{
	    cout<<"该学号已存在!请另取学号"<<endl;
	    return 0;
	}
}

Stud *SDatabase::query(char *n)                    //按学号查找
{
    for(int i=0;i<=top;i++)
		if(strcmp(n,student[i].getno())==0 && student[i].gettag()==0)
			return &student[i];
    return NULL;
}

Stud *SDatabase::rquery(char *na)                  //按姓名查找
{
	for(int i=0;i<=top;i++)
		if(strcmp(na,student[i].getname())==0 && student[i].gettag()==0)
			return &student[i];
    return NULL;
}

void SDatabase::disp()                             //输出所有学生信息
{
	cout<<endl;
	cout<<setw(15)<<"***********学号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"民族"<<setw(10)<<"出生地"<<setw(10)<<"  出生年月"<<"**************\n"<<endl;
	for (int i=0;i<=top;i++)
	{
		if(student[i].gettag()==0)
		    student[i].disp();
	}
}

void SDatabase::paixu()                             //按学号排序
{
    Stud s;
	for(int i=0;i<=top-1;i++)
		for(int j=0;j<=top-i-1;j++)
			if(strcmp(student[j].getno(),student[j+1].getno())>0)
			{
				s=student[j+1];
                student[j+1]=student[j];
                student[j]=s;
			}
	cout<<"\n 排序成功!"<<endl;
}
    

void SDatabase::studentdata()                       //学生库维护
{
	int choice=1;
	int choice1=1;
    int choice2=1;
	char c;
	char rno[10];
	char rname[20];
    char rsex[5];
	char rminzu[5];
	char raddress[20];
	char rbirth[20];
	Stud *r;
	while(choice!=0)                                //选择需要的操作
	{
		cout<<"\n学生管理系统  1:新增 2:更改 3:删除 4:查找 5:显示 6:全删 7:排序 0:退出 =>";
		cin>>choice;
		switch (choice)
		{
		case 1:
			cout<<"\n  输入学生学号:";
			cin>>rno;
			cout<<"  输入学生姓名:";
			cin>>rname;
			cout<<"      输入性别:";
			cin>>rsex;
			cout<<"      输入民族:";
			cin>>rminzu;
			cout<<"  输入出生地点:";
			cin>>raddress;
			cout<<"  输入出生年月:";
            cin>>rbirth;
			addstudent(rno,rname,rsex,rminzu,raddress,rbirth);
			break;
		case 2:
            cout << "  输入学生学号:";
			cin >> rno;
			r=query(rno);
			if (r==NULL)
			{
				cout << "  该学生不存在" << endl;
				break;
			}
            while(choice1!=0)                            //选择想更改的内容
			{
			    cout<<"想更改的内容:1:姓名 2:性别 3:民族 4:出生地点 5:出生年月 0:退出 =>";
			    cin>>choice1;
				switch(choice1)
				{
				case 1:
                    cout << "  输入新的姓名:";
			        cin >> rname;
			        r->changename(rname);
			        break;
				case 2:
                    cout << "  输入新的性别:";
			        cin >> rsex;
			        r->changesex(rsex);
			        break;
                case 3:
                    cout << "  输入新的民族:";
			        cin >> rminzu;
			        r->changeminzu(rminzu);
			        break;
                case 4:
                    cout << "  输入新的出生地点:";
			        cin >> raddress;
			        r->changeaddress(raddress);
			        break;
                case 5:
                    cout << "  输入新的出生年月:";
			        cin >> rbirth;
			        r->changebirth(rbirth);
			        break;
				}
			}
			break;
		case 3:
			cout << "\n  输入学生学号:";
			cin >>rno;
			r=query(rno);
			if (r==NULL)
			{
				cout << "  该学生不存在" << endl;
				break;
			}
			cout<<"是否真的删除? y/n   ";
			cin>>c;
			if(c=='y')
			{
			    r->delstud();
				cout<<"\n"<<setw(10)<<"删除成功!"<<endl;
				break;
			}
			else
				break;
		case 4:
            cout<<"1:按学号查找  2:按姓名查找 =>";
			cin>>choice2;
            switch (choice2)
			{
			case 1:
			    cout << "\n  输入学生学号:";
			    cin >> rno;
			    r=query(rno);
				break;
			case 2:
				cout<< "\n   输入学生姓名:";
				cin >> rname;
				r=rquery(rname);
				break;
			}
			if (r==NULL)
			{
				cout << "  该学生不存在" << endl;
				break;
			}
			r->disp();
			break;
		case 5:
            disp();
			break;
		case 6:
			cout<<"是否真的全部删除? y/n   ";
			cin>>c;
			if(c=='y')
			{
			    clear();
				cout<<"\n"<<setw(10)<<"删除成功!"<<endl;
				break;
			}
			else
				break;
		case 7:
			paixu();
			break;
		}
	}
}

SDatabase::~SDatabase()                               //析构函数,将student[]写入stud.txt文件中
{
    fstream file("stud.txt",ios::out);
	for(int i=0;i<=top;i++)
		if(student[i].gettag()==0)
			file.write((char *)&student[i],sizeof(student[i]));
    file.close();
}




    

⌨️ 快捷键说明

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