问题描述
- 急求C++2005 写的学生管理系统,不用MFC界面,求大神
-
C++2005 写的学生管理系统,不用MFC界面,要有管理员和学生两种身份登陆
解决方案
#include
#include
#include
using namespace std;
typedef struct stu//定义一个结构体作为类的私有成员
{
int num;
string name;
};
class student //学生类为基类
{
protected:
stu a[100];
int i, n;
static int d;//计算输入学生总数
public:
student();//构造函数
char menu();//菜单界面
void activity();//进行各种操作的一个平台
void input();//输入函数
void display(); //显示函数
void append();//追加函数
void searach();//查找函数
};
class teacher:public student
{
public:
teacher():student(){};
//下面几个函数是对其他函数的重定义
char menu();//增加了其他函数的菜单界面
void activity();//进行各种操作的一个平台
void mod();//修改函数
void shanchu();//删除函数
};
int student::d=0;//计数器赋值为0
student::student()//构造函数
{
cout<<"****welcome to the student`s information systerm ****"<<endl;
}
char student::menu()//学生菜单界面
{
char m;
cout<<"*********1:input the student`s information***********"<<endl;
cout<<"*********2:display the student`s information*********"<<endl;
cout<<"*********3:append the student`s information**********"<<endl;
cout<<"*********4:searach the student`s information*********"<<endl;
cout<<"*****************0:quit the systerm*****************"<<endl;
cout<<"*****************please input one number![ ]bbbb";
cin>>m;
return m;
}
char teacher::menu()//教师菜单界面
{
char m;
cout<<"*********1:input the student`s information***********"<<endl;
cout<<"*********2:display the student`s information*********"<<endl;
cout<<"*********3:append the student`s information**********"<<endl;
cout<<"*********4:searach the student`s information*********"<<endl;
cout<<"*********5:mod the student`s information*************"<<endl;
cout<<"*********6:shanchu the student`s information*********"<<endl;
cout<<"*****************0:quit the systerm*****************"<<endl;
cout<<"*****************please input one number![ ]bbbb";
cin>>m;
return m;
}
void student::activity()//学生各种操作界面
{
char k;
while(1)
{
k=menu();
switch (k)
{
case '1':input();break;
case '2':display();break;
case '3':append();break;
case '4':searach();break;
case '0':cout<<"**********thanks you !bye bye**********!"<<endl;return ;
default:cout<<"you are wrong!"<<endl;
}
}
}
void teacher::activity()//教师各种操作界面
{
char k;
while(1)
{
k=menu();
switch (k)
{
case '1':input();break;
case '2':display();break;
case '3':append();break;
case '4':searach();break;
case '5':mod();break;
case '6':shanchu();break;
case '0':cout<<"**********thanks you !bye bye**********!"<<endl;return ;
default:cout<<"you are wrong!"<<endl;
}
}
}
void student:: input()//输入函数
{
cout<<"please input one counter about student numbers!"<<endl;
cin>>n;
for(i=0;i<n;i++)
{ cout<<"the student`s num is :"<<endl;
cin>>a[i].num;
cout<<"the student`s name is : "<<endl;
cin>>a[i].name;
d++;
}
cout<<"the work is done! "<<endl;
display();
}
void student::display()//显示函数
{
cout<<"the student`s num : name"<<endl;
for(i=0;i<d;i++)
{
cout<<" "<<a[i].num<<" "<<a[i].name<<endl;
}
}
void student::append()//追加
{
int m;
cout<<"please input the counter numbers for append student~s information!"<<endl;
cin>>m;
for(i=n;i<n+m;i++)
{
cout<<"the student`s num is :"<<endl;
cin>>a[i].num;
cout<<"the student`s name is : "<<endl;
cin>>a[i].name;
d++;
}
cout<<"the work is done! "<<endl;
display();
}
void student::searach()//查找
{
int nu,g=0;
cout<<"please the student`s num"<<endl;
cin>>nu;
for(i=0;i<d;i++)
{
if(a[i].num==nu)
{
cout<<"the student`s num : name"<<endl;
cout<<" "<<a[i].num<<" "<<a[i].name<<endl;
g=1;
}
}
if(g==0)
cout<<"not found the student`s information!"<<endl;
cout<<"the work is done!"<<endl;
}
void teacher::mod()//修改
{
int nu;
cout<<"please input the student`s num"<<endl;
cin>>nu;
for(i=0;i<d;i++)
{
if(nu==a[i].num)
{
cout<<"the student`s num is :"<<endl;
cin>>a[i].num;
cout<<"the student`s name is : "<<endl;
cin>>a[i].name;
}
}
cout<<"the work is done! "<<d<<endl;
display();
}
void teacher::shanchu()//删除函数
{ int nu,s=-1;
cout<<"please input the student`s number!";
cin>>nu;
for(i=0;i<=d;i++)
{
if(nu==a[i].num)
{s=i;
for(i=s+1;i<d;i++)
{
a[i-1].num=a[i].num;
a[i-1].name=a[i].name;
}
d--;
}
}
if(s==-1)
cout<<"not found the student`s information!"<<endl;
cout<<"the work is done! "<<endl;
display();
}
void stu()//一级菜单,进入学生操作界面
{
student stud;
stud.activity();
}
void teach()//一级菜单,进入教师操作界面
{
teacher t;
t.activity();
}
int main()
{
char c;
cout<<"&&&&&&welcome to the student`s information systerm&&&&&&"<<endl;
cout<<"&&&&&&&&&&&&&&&s: 学生身份&&&&&&&&&&&&&&&"<<endl;
cout<<"&&&&&&&&&&&&&&&t: 教师身份&&&&&&&&&&&&&&&"<<endl;
cout<<"please input one character for cheek the password![ ]bbb";
cin>>c;
switch(c)
{
case 's': stu();break;
case 't':teach();break;
default :cout<<"you are wrong !";
}
return 0;
}
解决方案二:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define max 20
typedef struct student //学生
{
char sno[max]; // 学号
char sname[max]; //姓名
char sex[max]; //性别
char age[max]; //年龄
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年级
struct student* next;
} student;
student* head;
int LogOn() //登录模块,已实现输入密码不回显,如果中途发现输错某几位,可退格键重输
{
char username[max],password[max];
printf("n请输入用户名:");
scanf("%s",username);
printf("n请输入密码(最多15位):");
//开始以不回显且支持退格方式获取输入密码
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//条件i>=0是用于限制退格的范围
{
if(password[i-1]=='b')//对退格键的处理
{
printf("%c%c%c",'b','','b');
i=i-2;
}
else
printf("*");
}
password[--i]='';
//已获取密码。验证用户身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("n登录成功!");
return 1;
}
else
return 0;
}
void regist()
{
char ch;
student *s,*ptr; //s用来建新结点,ptr用来暂存头结点
do
{
s=(student*)malloc(sizeof(student)); // 新建一个学生结点
printf("n开始注册..."); //开始注册
printf("n请输入该学生的学号:");
scanf("%s",s->sno);
printf("n请输入该学生的姓名:");
scanf("%s",s->sname);
printf("n请输入该学生的性别:");
scanf("%s",s->sex);
printf("n请输入该学生的年龄:");
scanf("%s",s->age);
printf("n请输入该学生的系:");
scanf("%s",s->depart);
printf("n请输入该学生所在的班:");
scanf("%s",s->classs);
printf("n请输入该学生所在的年级");
scanf("%s",s->grade);
ptr=head;
head=s;//将新结点插入队头
s->next=ptr;
fflush(stdin);
printf("n请问是否继续注册?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
return;
}
void ElePrint(char str[]) //输出单个元素
{
if(str==NULL) exit(0);
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i++) printf(" ");//为了对齐输出,需插入一些空格
return;
}
int LinePrint(student *ptr) //输出一行
{
if(ptr==NULL) //检查传进来的指针
return 0;
printf("n");
ElePrint(ptr->sno);
ElePrint(ptr->sname);
ElePrint(ptr->age);
ElePrint(ptr->sex);
ElePrint(ptr->depart);
ElePrint(ptr->classs);
ElePrint(ptr->grade);
return 1;
}
void print() //输出全部学生信息
{
student *ptr=head;
printf("n学号 姓名 年龄 性别 系 班 年级 ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr->next;
}
printf("n");
return;
}
void search()//查询模块
{
int method;//查询方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用来接收查询关键字
while(1)
{
printf("n请选择查询方式");
printf("n1.按学号查询");
printf("n2.按姓名查询");
printf("n3.按所在系查询");
printf("n4.按所在班级查询");
printf("n5.按所在年级查询");
printf("n6.打印全部学生信息");
printf("n7.返回主菜单n");
scanf("%d",&method);
student *p=head,*temp;
switch(method)
{
case 1:
printf("n请输入要查询的学号:");
scanf("%s",no);
while(p)
{
if(!strcmp(p->sno,no))
break;
else
{
temp=p;
p=p->next;
}
}
printf("n学号 姓名 年龄 性别 系 班 年级 ");
LinePrint(p);
break;
case 2:
printf("n请输入要查询的姓名:");
scanf("%s",name);
printf("n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p->sname,name))
LinePrint(p);
p=p->next;
}
break;
case 3:
printf("n请输入学生所在的系:");
scanf("%s",departm);
printf("n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p->depart,departm))
LinePrint(p);
p=p->next;
}
break;
case 4:
printf("n请输入学生所在的班:");
scanf("%s",clss);
printf("n请输入学生所在的年级:");
scanf("%s",grades);
printf("n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p->classs,clss)&&!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
case 5:
printf("n请输入学生所在的年级:");
scanf("%s",grades);
printf("n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
case 6:
print();
break;
case 7:
return;
default:
printf("很抱歉,暂无此查询方式!");
break;
}
}
}
void modify()//修改学生信息
{
char num[max];
student *p=head;
printf("n请输入要修改的学生的学号:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sno,num))
break;
else
p=p->next;
}
if(p==NULL)
{
printf("n错误:没有此学生的信息!n");
return;
}
LinePrint(p);
printf("n请输入要修改的该学生的信息:");
printf("n1.姓名");
printf("n2.性别");
printf("n3.年龄");
printf("n4.所在的系");
printf("n5.所在的班");
printf("n6.所在的年级");
char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];
int select;
fflush(stdin);
scanf("%d",&select);
printf("n请输入新的信息:");
switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break;
default:
printf("nError!");
break;
}
LinePrint(p);
return;
}
void del()// 删除某学生的信息
{
student *p=head,*temp=head,*s;
char num1[max];
printf("n请输入要删除的学生的学号:");
scanf("%s",num1);
while(p)//查找该学生所在的结点
{
if(!strcmp(p->sno,num1))
break;
else
{
temp=p;
p=p->next;
}
}//while
if(!p)
{
printf("n不存在此学生的信息.");
return;
}
LinePrint(p);//输出该学生的信息
printf("n请问真的要删除该学生的信息吗?(Y/N)");
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
s=p->next;
temp->next=s;
free(p);
printf("n已经删除该学生的信息.");
}
return;
}
void sort() //排序模块。将学生记录按学号从小到大排列。用起泡排序算法实现
{
student *ptr,*s=head,*p;
int count=0,count1;
while(s)//统计链表结点个数
{
count++;
s=s->next;
}
for(int i=1;i<count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用来控制每轮起泡排序的终点,即每次把学号最小的结点移到倒数第i个结点
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sno,ptr->next->sno)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==NULL) //ptr处于队头时
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==NULL) //ptr处于队头时
p=head;
else
p=p->next;
}
}
}
return;
}
void quit()
{
char ch;
printf("n真的要退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
return;
}
int main()
{
int option;
printf("nCopyright@2005 KongXinCai All rights reserved.");
printf("n欢迎使用学生信息管理系统!n");
//登录模块
int icheck=0;
while(icheck<3)
{
if(LogOn()==0)
icheck++;
else
break;
}
if(icheck==3)
{
printf("n连续登录三次不成功,退出!");
exit(0);
}
//系统界面
while(1)
{
printf("nn请选择需要的服务:");
printf("n1.注册");
printf("n2.查询");
printf("n3.修改");
printf("n4.删除");
printf("n5.排序");
printf("n7.求平均");
printf("n6.退出n");
scanf("%d",&option);
switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}
}
return 0;
}