一个C++的程序设计题目,需要编写至少100行,最好能有说明,考试题目,急啊~~谢谢啦~~

题目二十三:班级档案管理系统程序功能简介:对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。功能要求:(1)本系统... 题目二十三:班级档案管理系统
程序功能简介:
对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。
功能要求:
(1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、年龄、备注。
(2)本系统显示这样的菜单:
请选择系统功能项:
a 学生基本信息录入
b 学生基本信息显示
c 学生基本信息保存
d 学生基本信息删除
e 学生基本信息修改(要求先输入密码)
f 学生基本信息查询
(1)按学号查询
(2)按姓名查询
(3)按性别查询
(4)按年龄查询
g. 退出系统
(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生基本信息保存到文件中。
(5)进入系统之前要先输入密码。
展开
 我来答
dexahh
2011-06-06 · TA获得超过354个赞
知道答主
回答量:216
采纳率:100%
帮助的人:287万
展开全部
#include <fstream.h>
#include <iostream>
#include <string.h>
//using namespace std;

#define N 30
typedef unsigned short AGE;
typedef bool SEX;
const char* split = "************************************************\n";
class _stu
{
public:

SEX sex;//0 男, 1 女
AGE age;
char no[10];//
char des1[2];//预留,必须为0
char name[16];
char des2[2];//预留,必须为0
char mark[255];
char des3[2];//预留,必须为0

_stu():age(0),sex(0){
memset(no,0,sizeof(no));
memset(name,0,sizeof(name));
memset(mark,0,sizeof(mark));
memset(des1,0,sizeof(des1));
memset(des2,0,sizeof(des2));
memset(des3,0,sizeof(des3));
}
_stu(char* _no, char* _name,SEX _sex,AGE _age,char* _mark)
:age(_age), sex(_sex)
{
strcpy(name,_name);
strcpy(no,_no);
strcpy(mark,_mark);
memset(des1,0,sizeof(des1));
memset(des2,0,sizeof(des2));
memset(des3,0,sizeof(des3));
}
void set(char* _no, char* _name,SEX _sex,AGE _age,char* _mark)
{
age = _age;
sex = _sex;
strcpy(name,_name);
strcpy(no,_no);
strcpy(mark,_mark);
}
void setNo(char* n){strcpy(no,n);}
void getNo(char*& n){strcpy(n,no);}
void setName(char* n){strcpy(name,n);}
void getName(char*& n){strcpy(n,name);}
void setAge(AGE a){age = a;}
AGE getAge(){return age;}
void setSex(SEX s){sex = s;}
SEX getSex(){return sex;}
friend std::istream& operator >>(std::istream& in, _stu& s)
{
char name[16],no[10],mark[255];
AGE age;
SEX sex;
in>>no>>name>>sex>>age>>mark;
s.set(no,name,sex,age,mark);
return in;
}
friend std::ostream& operator << (std::ostream& out, _stu& s)
{
out<<"学号:"<<s.no<<std::endl;
out<<"姓名:"<<s.name<<std::endl;
char * p = s.sex ? "女" : "男";
out<<"姓别:"<<p<<std::endl;
out<<"年龄:"<<s.age<<std::endl;
out<<"备注:"<<s.mark<<std::endl;
out<<split;
return out;
}
~_stu(){}
};

class _class
{
_stu m_stu[N];
int m_num;
public:
_class():m_num(0){}
void Add()
{
std::cin>>m_stu[m_num++];
}
friend std::ostream& operator << (std::ostream& out, _class& cs)
{
out<<"\t\t<--学生信息-->\n";
out<<split;
for (int i = 0; i < cs.m_num; i++)
{
out<<cs.m_stu[i];
}
out<<"共 "<<cs.m_num<<" 位学生信息。\n\n";
out<<split;
return out;
}
int FindByName(char* name)
{
int find = -1;
for (int i = 0; i < m_num; i++)
{
if(strcmp(name,m_stu[i].name) == 0)
{
find = i;
break;
}
}
return find;
}
int FindByNo(char* no)
{
int find = -1;
for (int i = 0; i < m_num; i++)
{
if(strcmp(no,m_stu[i].no) == 0)
{
find = i;
break;
}
}
return find;
}
int FindByName(char* name, int* reslut)
{
int n = 0;
for (int i = 0; i < m_num; i++)
{
if(strcmp(name,m_stu[i].name) == 0)
{
reslut[n++] = i;
}
}
return n;
}
int FindByNo(char* no, int* reslut)
{
int n = 0;
for (int i = 0; i < m_num; i++)
{
if(strcmp(no,m_stu[i].no) == 0)
{
reslut[n++] = i;
}
}
return n;
}
int FindByAge(AGE age,int* reslut)
{
int n = 0;
for (int i = 0; i < m_num; i++)
{
if(m_stu[i].age == age)
{
reslut[n++] = i;
}
}
return n;
}
int FindBySex(SEX sex,int* reslut)
{
int n = 0;
for (int i = 0; i < m_num; i++)
{
if(m_stu[i].sex == sex)
{
reslut[n++] = i;
}
}
return n;
}
bool RemoveAt(int index,int count = 1)
{
if(index< 0 || index+count >= m_num)
return false;
memmove(&m_stu[index],&m_stu[index+count],sizeof(_stu)*(m_num - index - count));
m_num -= count;
return true;
}
bool RemoveByName(char* name)
{
return RemoveAt(FindByName(name));
}
bool RemoveByNo(char* no)
{
return RemoveAt(FindByNo(no));
}
_stu& operator [] (int index)
{
return m_stu[index];
}

void save(char* file)
{
fstream fs;
fs.open(file,ios::binary|ios::out|ios::trunc);
fs<<m_num;
fs.write((unsigned char*)m_stu,m_num*sizeof(_stu));
fs.close();
}
void load(char* file)
{
fstream fs;
fs.open(file,ios::binary|ios::in);
fs>>m_num;
fs.read((unsigned char*)m_stu,m_num*sizeof(_stu));
fs.close();
}
};

void main()
{
char* mainmenu = \
"\n\
<--班级档案管理系统-->\n\n\
(a) 学生基本信息录入\n\
(b) 学生基本信息显示\n\
(c) 学生基本信息保存\n\
(d) 学生基本信息删除\n\
(e) 学生基本信息修改\n\
(f) 学生基本信息查询\n\
(g) 退出系统\n";
char* quarymenu = \
"\n\
(1) 按学号查询\n\
(2) 按姓名查询\n\
(3) 按性别查询\n\
(4) 按年龄查询\n\
(5) 返回上级菜单\n";
char* tip = "输入Y继续...,其它键返回主菜单。\n";
char* input = "请依次输入学生 学号(10位),姓名,姓别(0 男,1 女),年龄,备注。\n";
char key;//主循环输入字符
bool bq = false;//退出标志
_class cls;
char* file = "stu_info.si";
bool bedit = false;//标记内容是否被改过
cls.load(file);
char password[] = "admin";//先写死。
char pw[12];//密码最长12位
int total = 0;
std::cout<<"请输入密码:\n";
bool bOk = false;
while(1)
{
memset(pw,0,sizeof(pw));
cin>>pw;
if(strcmp(password,pw))
{
if(++total >= 3)
{
std::cout<<"您已经连续三次输入有误!\n";
break;
}
std::cout<<"密码输入有误,请重新输入!\n";
continue;
}
std::cout<<"密码输入正确!\n";
bOk = true;
break;
}
if(!bOk)
return;
while(1)//主菜单循环
{

std::cout<<mainmenu;
std::cin>>key;
switch (key)
{
case 'a':
case 'A':
{
while(1)//学生信息录入循环
{
std::cout<<input;
cls.Add();
bedit = true;
char k;
std::cout<<cls;
std::cout<<tip;
std::cin>>k;
if(k == 'y' || k == 'Y')continue;
else break;
}

}
break;
case 'b':
case 'B':
{
std::cout<<cls;
}
break;
case 'c':
case 'C':
{
cls.save(file);
std::cout<<"信息已存入文件!\n";
bedit = false;
}
break;
case 'd':
case 'D':
{
while(1)
{
std::cout<<"请输入要删除学生的学号\n";
char no[10];
std::cin>>no;
if(!cls.RemoveByNo(no))
std::cout<<"删除失败,请确认输入的学号是否正确。\n";
else
bedit = true;
std::cout<<tip;
char k;
std::cin>>k;
if(k == 'y' || k == 'Y')continue;
else break;
}

}
break;
case 'e':
case 'E':
{
char pw[12];//密码最长12位
int total = 0;
std::cout<<"请输入密码:\n";
bool bOk = false;
while(1)
{
memset(pw,0,sizeof(pw));
cin>>pw;
if(strcmp(password,pw))
{
if(++total >= 3)
{
std::cout<<"您已经连续三次输入有误!\n";
break;
}
std::cout<<"密码输入有误,请重新输入!\n";
continue;
}
std::cout<<"密码输入正确,可以进行修改!\n";
bOk = true;
break;
}
if(bOk)
{
while(1)
{
std::cout<<"请输入要修改学生的学号\n";
char no[10];
std::cin>>no;
int index = cls.FindByNo(no);
char k;
if(index < 0)
{
std::cout<<"未找到该学生,请确认输入的学号是否正确。\n";
std::cout<<tip;
std::cin>>k;
if(k == 'y' || k == 'Y')continue;
else break;
}
std::cout<<input;
std::cin>>cls[index];
bedit = true;
std::cout<<tip;
std::cin>>k;
if(k == 'y' || k == 'Y')continue;
else break;
}
}
}
break;
case 'f':
case 'F':
{

bool sbq = false;
bool bip = true;
char subkey;
while(1)
{
std::cout<<quarymenu;
std::cin>>subkey;
int a[N],count = 0;
switch (subkey)
{
case '1':
std::cout<<"请输入学号(10位):\n";
char no[10];
std::cin>>no;
count = cls.FindByNo(no,a);
break;
case '2':
std::cout<<"请输入学生姓名:\n";
char name[16];
std::cin>>name;
count = cls.FindByName(name,a);
break;
case '3':
std::cout<<"请输入学生姓别(0 男,1 女):\n";
SEX sex;
std::cin>>sex;
count = cls.FindBySex(sex,a);
break;
case '4':
std::cout<<"请输入学生年龄:\n";
AGE age;
std::cin>>age;
count = cls.FindByAge(age,a);
break;
case '5':
sbq = true;
break;
default:
bip = false;
break;
}
if(bip)
{
std::cout<<"\t\t<--查询结果-->\n";
std::cout<<split;
for (int i = 0; i < count; i++)
{
std::cout<<cls[a[i]];
}
std::cout<<"共计 "<<count<<" 条记录!\n\n";
std::cout<<split;
}

if(sbq)
break;
}

}
break;
case 'g':
case 'G':
{
bq = true;
}
break;
default:
break;
}
if(bq)
{
if(bedit)
{
std::cout<<"程序即将退出,内容已修改,是否保存?(Y 是,其它键否)\n";
char k;
std::cin>>k;
if(k == 'y' || k == 'Y')
cls.save(file);
}
break;
}
}
}
追问
这都是C++里面的内容么?我有点看不懂
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式