您的位置:首页 > 其它

学生信息管理系统

2008-06-24 10:19 483 查看
#include<iostream>
#include<iomanip>
#include<string.h>
#include<fstream>
using namespace std;
struct node
{
int num;
char name[20];
char sex;
int age;
char addr[50];
char course[20];
int score;
node *next;
};

struct student
{
private:
node *head;
public:
student();
void In_student(); //录入信息
void Modify_student(); //修改信息
void Del_student(); //删除信息
void Prt_student(); //查询信息
void Paixu_student(); //排序信息
void Ins_student(); //插入信息
};

student::student() //作用是定义一个头结点!!
{
node *p;
p=new node;
p->num=-1;

p->age=0;
p->score=-1;
p->next=p;
head=p;
return;
}

void student::In_student() //这里的录入信息实际上是在链表中插入元素
{

cout<<" ---------欢迎使用录入套餐------------- "<<endl;
node *p,*k;
int nu; //学号
char nam[20]; //姓名
char se; //性别
int ag; //年龄
char add[50]; //地址
char cou[20]; //课程
int s; //成绩
ofstream outfile("f1.dat",ios::out);
if(!outfile)
{
cerr<<"打开失败!!"<<endl;
exit(1);
}
k=head;
cout<<" 请输入--(以学号为'-1'结束录入,但还需输完整个信息段!!)"<<endl;
cout<<"学号 姓名 性别 年龄 地址 课程 成绩 "<<endl;

cin>>nu
>>nam
>>se
>>ag
>>add
>>cou
>>s;
while(nu!=-1)
{
outfile<<nu<<nam<<se<<ag<<add<<cou<<s;
p=new node;
p->num=nu;
strcpy(p->name,nam);
p->sex=se;
p->age=ag;
strcpy(p->addr,add);
strcpy(p->course,cou);
p->score=s;
p->next=head;
k->next=p;
k=p;
cout<<" 继续录入下一位学生信息"<<endl;
cin>>nu
>>nam
>>se
>>ag
>>add
>>cou
>>s;

}
outfile.close();
cout<<" ----------谢谢使用录入套餐----------"<<endl;
return;
}

void student::Modify_student()
{
cout<<" ----------欢迎使用修改套餐----------- "<<endl;
cout<<" 说明:按学号进行修改"<<endl;
if(head->next==head)
{
cout<<"Sorry!! 学生系统中没有信息!!"<<endl;
cout<<" -----------谢谢使用修改套餐------------ "<<endl;
return;
}
int n; //学号
int m;
node *p;
cout<<" 请输入要修改信息的同学的学号:"<<endl;
cin>>n;
p=head->next;
while((p->num)!=n)
p=p->next;
if(p==head)
{
cout<<"Sorry!! 学生系统中没这位同学!!"<<endl;
cout<<" -----------谢谢使用修改套餐------------ "<<endl;
return;
}

cout<<" 请修改"<<n<<"号的基本信息"<<endl;
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;

do
{
cout<<"请选择修改键:"<<endl;
cin>>m;
switch(m)
{
case 1: int nu;
cout<<" 请输入新的学号:"<<endl;
cin>>nu;
p->num=nu;
cout<<" 您已成功修改!!"<<endl;
break;
case 2: char nam[20];
cout<<" 请输入新的姓名:"<<endl;
cin>>nam;
strcpy(p->name,nam);
cout<<" 您已成功修改!!"<<endl;
break;
case 3: char se;
cout<<" 请输入新的性别:"<<endl;
cin>>se;
p->sex=se;
cout<<" 您已成功修改!!"<<endl;
break;
case 4: int ag;
cout<<" 请输入新的年龄:"<<endl;
cin>>ag;
p->age=ag;
cout<<" 您已成功修改!!"<<endl;
break;
case 5: char add[50] ;
cout<<" 请输入新的地址:"<<endl;
cin>>add;
strcpy(p->addr,add);
cout<<" 您已成功修改!!"<<endl;
break;
case 6: char cou[20];
cout<<" 请输入新的课程:"<<endl;
cin>>cou;
strcpy(p->course,cou);
cout<<" 您已成功修改!!"<<endl;
break;
case 7: int s;
cout<<" 请输入新的成绩:"<<endl;
cin>>s;
p->score=s;
cout<<" 您已成功修改!!"<<endl;
break;
case 8: break;
}
}while(m!=8);
cout<<" -----------谢谢使用修改套餐------------ "<<endl;
return;
}

void student::Del_student()
{
cout<<" ----------欢迎使用删除套餐---------- "<<endl;
if(head->next==head)
{
cout<<"Sorry!! 学生系统中没有信息!!"<<endl;
cout<<" ----------谢谢使用删除套餐----------- "<<endl;
return;
}
int n; //学号
node *p,*q;
cout<<" 请输入要删除信息的同学的学号:"<<endl;
cin>>n;
q=head;
while(((q->next)->num)!=n)
q=q->next;
if(q->next==head)
{
cout<<"Sorry!! 学生系统这位同学!!"<<endl;
return;
}
p=q->next;
q->next=p->next;
delete p;
cout<<" 您已成功删除!!"<<endl;
cout<<" ----------谢谢使用删除套餐----------- "<<endl;
return;

}

void student::Prt_student()
{
cout<<" ----------欢迎使用查询套餐------------ "<<endl;

if(head->next==head)
{
cout<<"Sorry!! 学生系统中没有信息!!"<<endl;
cout<<" ----------谢谢使用查询套餐----------"<<endl;
return;
}

int n;
int count0=0;

cout<<" 您好,您想输出所有学生的信息还是个别人或部分信息?"<<endl;
cout<<" 这里是提示!!"<<endl;
cout<<" 按键1-----输出所有信息"<<endl; //查询所有信息
cout<<" 按键2-----按学号查询信息"<<endl; //按学号查询信息
cout<<" 按键3-----按姓名查询信息"<<endl; //按姓名查询信息
cout<<" 按键4-----按年龄查询信息"<<endl; //按年龄查询信息
cout<<" 按键5-----按成绩查询信息"<<endl; //按成绩查询信息 //按分数查询信息
cout<<" 按键6-----退出查询程序 "<<endl;
do
{
cout<<"请选择查询键:"<<endl;
cin>>n;
switch(n)
{
case 1:

node *p;
p=head->next;
cout<<"学号 姓名 性别 年龄 地址 课程 成绩:"<<endl;
while(p!=head)
{

cout<<" "<<p->num<<" "
<<p->name<<" "
<<p->sex<< " "
<<p->age<< " "
<<p->addr<< " "
<<p->course<< " "
<<p->score<< " "
<<endl;
p=p->next;
count0++;
}
cout<<" 学生成绩信息管理系统中共有"<<count0<<"个学生信息"<<endl;
break;
case 2:

int m;

node *q;
q=head->next;
cout<<" 请输入要查找的同学的学号:"<<endl;
cin>>m;

while(q!=head&&(q->num)!=m)
q=q->next;

if((q->num)==m)
{
cout<<"学号:"<<q->num<<"--"
<<"姓名:"<<q->name<<"--"
<<"性别:"<<q->sex<<"--"
<<"年龄:"<<q->age<<"--"
<<"地址:"<<q->addr<<"--"
<<"课程:"<<q->course<<"--"
<<"成绩:"<<q->score<<"--"
<<endl;

}
else

{
cout<<" 系统中没有学号是"<<m<<"的同学!!"<<endl;
}

break;
case 3:
char na[20];
node *w;
w=head->next;

cout<<" 请输入要查找的同学的姓名:"<<endl;
cin>>na;
while(w!=head&&strcmp(w->name,na)!=0)
w=w->next;

if(strcmp(w->name,na)==0)
{
cout<<"学号:"<<w->num<<"--"
<<"姓名:"<<w->name<<"--"
<<"性别:"<<w->sex<<"--"
<<"年龄:"<<w->age<<"--"
<<"地址:"<<w->addr<<"--"
<<"课程:"<<w->course<<"--"
<<"成绩:"<<w->score<<"--"
<<endl;

}
else
{
cout<<" 系统中没有姓名是"<<na<<"的同学!!"<<endl;
}

break;
case 4:
node *z;
int a; //年龄

z=head->next;
cout<<" 请输入要查找的同学的年龄:"<<endl;
cout<<"说明:如果没有任何查询结果,表明没有符合条件的结果!!!"<<endl;
cin>>a;
while(z!=head)
{
if(z->age==a)
{
cout<<"学号:"<<z->num<<"--"
<<"姓名:"<<z->name<<"--"
<<"性别:"<<z->sex<<"--"
<<"年龄:"<<z->age<<"--"
<<"地址:"<<z->addr<<"--"
<<"课程:"<<z->course<<"--"
<<"成绩:"<<z->score<<"--"<<endl;

}

z=z->next;
}

break;
case 5:
cout<<" 您好,您按成绩查询是以一个分数还是以一个分数段?"<<endl;
cout<<" 这里是提示!!"<<endl;
cout<<" 键1-----按一个分数查询信息"<<endl;
cout<<" 键2-----按一个分数段查询信息"<<endl;
cout<<" 键3-----退出成绩查询程序"<<endl;
int o;
do
{
cout<<" 请输入键:"<<endl;

cin>>o;
switch(o)
{
case 1:
node *x;
int s; //成绩

x=head->next;
cout<<" 请输入要查找的同学的成绩:"<<endl;
cout<<"说明:如果没有任何查询结果,表明没有符合条件的结果!!!"<<endl;
cin>>s;
while(x!=head)
{
if(x->score==s)
{
cout<<"学号:"<<x->num<<"--"
<<"姓名:"<<x->name<<"--"
<<"性别:"<<x->sex<<"--"
<<"年龄:"<<x->age<<"--"
<<"地址:"<<x->addr<<"--"
<<"课程:"<<x->course<<"--"
<<"成绩:"<<x->score<<"--"<<endl;

}
x=x->next;
}

break;
case 2:
node *y;
y=head->next;

int h; //分数段的最高值
int l; //分数段的最低值
cout<<" 请分别输入分数段的最高值,最低值--"<<endl;
cout<<"说明:如果没有任何查询结果,表明没有符合条件的结果!!!"<<endl;
cin>>h>>l;

while(y!=head)
{
if((y->score>=l)&&(y->score<=h))
{
cout<<"学号:"<<y->num<<"--"
<<"姓名:"<<y->name<<"--"
<<"性别:"<<y->sex<<"--"
<<"年龄:"<<y->age<<"--"
<<"地址:"<<y->addr<<"--"
<<"课程:"<<y->course<<"--"
<<"成绩:"<<y->score<<"--"<<endl;

}
y=y->next;
}

break;
case 3:
cout<<" 您已退出成绩程序!!"<<endl;
break;
}
}while(o!=3);
break;

case 6:
break;
}
}while(n!=6);
cout<<" ----------谢谢使用查询套餐----------"<<endl;
return;
}

void student::Paixu_student()
{

cout<<" ----------欢迎使用排序套餐----------"<<endl;
if(head->next==head)
{
cout<<" Sorry!! 学生系统中没有信息!!"<<endl;
cout<<" ----------谢谢使用排序套餐----------"<<endl;
return;
}
ifstream infile("f1.dat",ios::in);
if(!infile)
{
cerr<<"打开失败 !!"<<endl;
exit(1);
}
cout<<"系统自动输出所有学生基本信息:"<<endl;
cout<<"学号 姓名 性别 年龄 地址 课程 成绩:"<<endl;
node *pm;
node *pn;
pm=head->next;
pn=head->next;
while(pm!=head)
{
infile;
cout<<" "<<pm->num<<" "
<<pm->name<<" "
<<pm->sex<< " "
<<pm->age<< " "
<<pm->addr<< " "
<<pm->course<< " "
<<pm->score<< " "
<<endl;
pn=pn->next;
pm=pm->next;

}
int n;
cout<<" 您好,下面提供几种排序方案"<<endl;
cout<<" 这里是提示!!"<<endl;
cout<<" 键1-----按成绩排序"<<endl;
cout<<" 键2-----按年龄排序"<<endl;
cout<<" 键3-----按学号排序"<<endl;
cout<<" 键4-----按姓名排序"<<endl;
cout<<" 键5-----退出排序套餐"<<endl;

do
{

cout<<"请选择排序键:"<<endl;
cin>>n;
switch(n)
{
case 1:

node *p2;
node *p1;
p2=head->next;
p1=p2->next;

while(p2->next!=head) //冒泡法
{

if(p2->score > p1->score)
{ // 把头指针指向当前比较小的节点
p2->next=p1->next;
p1->next=head->next;
head->next=p1;
// 把用于比较的两个指针复位
p2=head->next;
p1=p2->next ;
}
else
{ // 指向下一个节点
p2=p2->next ;
p1=p2->next ;
}

}
cout<<" 当前表以按学生成绩排序成功"<<endl;

node *q;
q=head->next;
while(q!=head)
{

cout<<"学号:"<<q->num<<"--"
<<"姓名:"<<q->name<<"--"
<<"性别:"<<q->sex<<"--"
<<"年龄:"<<q->age<<"--"
<<"地址:"<<q->addr<<"--"
<<"课程:"<<q->course<<"--"
<<"成绩:"<<q->score<<"--"
<<endl;

q=q->next;
}

break;
case 2:
node *h2;
node *h1;
h2=head->next;
h1=h2->next;

while(h2->next!=head) //冒泡法
{

if(h2->age > h1->age)
{ // 把头指针指向当前比较小的节点
h2->next=h1->next;
h1->next=head->next;
head->next=h1;

// 把用于比较的两个指针复位
h2=head->next;
h1=h2->next ;
}
else
{ // 指向下一个节点
h2=h2->next ;
h1=h2->next ;
}

}
cout<<" 当前表以按学生年龄排序成功"<<endl;
// return head->next;

node *pt;
pt=head->next;
while(pt!=head)
{
cout<<"学号:"<<pt->num<<"--"
<<"姓名:"<<pt->name<<"--"
<<"性别:"<<pt->sex<<"--"
<<"年龄:"<<pt->age<<"--"
<<"地址:"<<pt->addr<<"--"
<<"课程:"<<pt->course<<"--"
<<"成绩:"<<pt->score<<"--"
<<endl;
pt=pt->next;
}

break;
case 3:
node *a2;
node *a1;
a2=head->next;
a1=a2->next;

while(a2->next!=head) //冒泡法
{

if(a2->num > a1->num)
{ // 把头指针指向当前比较小的节点
a2->next=a1->next;
a1->next=head->next;
head->next=a1;

// 把用于比较的两个指针复位
a2=head->next;
a1=a2->next ;
}
else
{ // 指向下一个节点
a2=a2->next ;
a1=a2->next ;
}

}
cout<<" 当前表以按学生学号排序成功"<<endl;

node *ptt;
ptt=head->next;
while(ptt!=head)
{
cout<<"学号:"<<ptt->num<<"--"
<<"姓名:"<<ptt->name<<"--"
<<"性别:"<<ptt->sex<<"--"
<<"年龄:"<<ptt->age<<"--"
<<"地址:"<<ptt->addr<<"--"
<<"课程:"<<ptt->course<<"--"
<<"成绩:"<<ptt->score<<"--"
<<endl;
ptt=ptt->next;
}

break;

case 4:
node *z2;
node *z1;
z2=head->next;
z1=z2->next;

while(z2->next!=head) //冒泡法
{

if(strcmp(z2->name,z1->name)>0)
{ // 把头指针指向当前比较小的节点
z2->next=z1->next;
z1->next=head->next;
head->next=z1;

// 把用于比较的两个指针复位
z2=head->next;
z1=z2->next ;
}
else
{ // 指向下一个节点
z2=z2->next ;
z1=z2->next ;
}

}
cout<<" 当前表以按学生姓名排序成功"<<endl;

node *pti;
pti=head->next;
while(pti!=head)
{
cout<<"学号:"<<pti->num<<"--"
<<"姓名:"<<pti->name<<"--"
<<"性别:"<<pti->sex<<"--"
<<"年龄:"<<pti->age<<"--"
<<"地址:"<<pti->addr<<"--"
<<"课程:"<<pti->course<<"--"
<<"成绩:"<<pti->score<<"--"
<<endl;
pti=pti->next;
}

break;

case 5:
break;

}

}while(n!=5);

cout<<" ----------谢谢使用排序套餐----------"<<endl;
return;
}

void student::Ins_student()
{
int nn; //学号
int n;
char na[20];
char s;
int a;
char ad[50];
char co[20];
int sc;
cout<<" ----------欢迎使用插入套餐----------"<<endl;
cout<<" 您想在哪个学号前插入?请输入该学号:"<<endl;
cin>>nn;
cout<<" 请输入该同学的学生信息(包括:学号,姓名,性别,年龄,地址,课程,成绩!)"<<endl;
cin>>n>>na>>s>>a>>ad>>co>>sc;
node *pp,*qq;
pp=new node;
pp->num=n;
strcpy(pp->name,na);
pp->sex=s;
pp->age=a;
strcpy(pp->addr,ad);
strcpy(pp->course,co);
pp->score=sc;

qq=head;
while((qq->next!=head)&&(((qq->next)->num)!=nn))
qq=qq->next;
pp->next=qq->next;
qq->next=pp;
cout<<" 您好,您已成功插入!!"<<endl;
cout<<" ----------谢谢使用插入套餐----------"<<endl;
return;
}

#include<iostream>
#include"score.h"
#include<fstream>
using namespace std;
int main()
{
student stu;
int n;
int count=0;
char password[4]; //密码
char name[11]; //用户名
cout<<" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ "<<endl;
cout<<"┃ ★ ★ ★ 学生成绩信息管理系统 ★ ★ ★ ┃"<<endl;
cout<<"┃ ☆程序员之家☆ ┃"<<endl;
cout<<"┃ ----- 产权所有 违者必究 ┃"<<endl;
cout<<" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ "<<endl;
cout<<" ****************************欢迎进入学生成绩信息管理系统*********************"<<endl;
cout<<endl;
cout<<"请输入用户名:"<<endl;
cin>>name;
cout<<"请输入密码:"<<endl;
while(1)
{
cin>>password;
if(strcmp(password,"7954")==0 )
{

cout<<" *您的密码正确!!-------------*"<<endl;
cout<<endl;

cout<<" **************************************************************************"<<endl;
cout<<" **************** ┃* 顾客您好-这里是套餐提示!! *┃ *******************"<<endl;
cout<<" **************** ┃* 按键1 -----------录入信息 *┃ *******************"<<endl;
cout<<" ******厚德****** ┃* 按键2 -----------修改信息 *┃ *******规范********"<<endl;
cout<<" **************** ┃* 按键3 -----------删除信息 *┃ *******************"<<endl;
cout<<" **************** ┃* 按键4 -----------插入信息 *┃ *******************"<<endl;
cout<<" ******重能****** ┃* 按键5 -----------查询信息 *┃ *******创新********"<<endl;
cout<<" **************** ┃* 按键6 -----------排序信息 *┃ *******************"<<endl;
cout<<" **************** ┃* 按键7 -----------退出系统 *┃ *******************"<<endl;
cout<<" ****************************************************南京信息职业技术学院**"<<endl;
do
{
cout<<"请您选择套餐按键"<<endl;
cin>>n;
switch (n)
{
case 1: {
stu.In_student();
break;
}
case 2: {
stu.Modify_student();
break;
}
case 3: {
stu.Del_student();
break;
}
case 4: {
stu.Ins_student();
break;
}
case 5: {
stu.Prt_student();
break;
}
case 6:{
stu.Paixu_student();
break;
}
case 7: {
break;
}

}
}while(n!=7);
}

else
{
count=count+1;

if(count==3)
{
cout<<"实在对不起,您已经输入错误3次了!!!"<<endl;
cout<<"系统自动退出!!!"<<endl;
break;
}

cout<<"对不起! 您的密码有误!!"<<endl;
cout<<"请重新输入密码"<<endl;
continue;
}
break;
}
cout<<" 谢谢使用-----学生成绩信息管理系统!!! "<<endl;
cout<<" 再见!! "<<endl;
cout<<"*******************************************************************************"<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: