设计并开发一个简易的学生成绩管理信息系统

本系统具有以下三种功能:
学生信息的输入(姓名,学号,成绩)、按成绩从高到低排序、所有学生成绩的打印。
其中学生的信息包括:学号(字符串),姓名(字符串),成绩(整型)。
高级功能(可选):增加文件操作,可以考虑将数据保存在硬盘上,每次运行先从硬盘读取上次已经录入的所有信息。
实验环境:TC2.0或VC++6.0
大哥,你的程序功能有点太强了,我看不懂啊,而且我也用不到啊

第1个回答  2011-01-14
系统功能分析是在系统开发的总体任务的基础上完成。本系统需要完成的功能主要有9部分
1、登录模块:具有不同权限的管理人员可以通过用户名和密码登录系统,进入主界面。
2、学生成绩查询模块:按操作员输入的编号、姓名能以查询一个至多个学生的学生记录,并可打印存档。
3、学生成绩录入模块:录入学生成绩信息,输入完成后,将数据存盘。
4、学生成绩修改模块:对已存档的学生进行日常管理,如修改学生成绩、增加、删除等基本操作。
5、学生成绩统计分析模块:学生成绩报表,并给出分析报告。
6、用户管理模块:赋予高级管理者以增加、删除、修改普通管理员的权限。赋予普通管理员修改密码的权限。
7、系统备份模块:对系统的所有文件做备份,当系统文件丢失或损坏时可以对系统进行恢复,避免损失。
8、系统帮助模块:简单介绍本系统各模块的使用方法。
9、退出系统模块:退出系统返回WIDNOWS界面。本回答被网友采纳
第3个回答  2011-01-14
#include<iostream>
#include<fstream>
#include<string>
#include<conio.h>
#include<windows.h>
using namespace std;
#define PATH "d:\\StudentFile.txt"

class student
{
private:
char Number[20];
char Name[40];
int Math; int English; int Chinese;

public:
void GetInformation()
{
cout<<cout<<"学号\t\t姓名\t数学\t英语\t语文"<<endl;
cout<<"\t";
cin>>Number>>Name>>Math>>English>>Chinese;
}
void ShowInformation()
{
cout<<Number<<"\t"<<Name<<"\t"<<Math<<"\t"<<English<<"\t"<<Chinese<<endl;
}

char *SetNumber(){ return Number; }

char GetNumber(char number[])
{
if(strcmp(Number,number)==0)
return 1;
return 0;
}
};

struct linklist
{
student *data;
linklist *next;
};
int N=0; //定义当前程序中共有多少学生
linklist *HEAD=NULL,*REAR=NULL;
void readin() //从文件中读取已经存储的学生数据;
{
ifstream in(PATH); /*PATH为存档文件路径*/
in.read((char*)(&N),sizeof(int)); //文件开始的前4个字节记录这当前文件中共有多少个学生信息,所以先将它读入程序
for(int i=0;i<N;i++)
if(i==0) //如果当前是第一个学生信息
{
HEAD=REAR=new linklist;
HEAD->next=NULL;
HEAD->data=new student;
in.read((char *)(HEAD->data),sizeof(student)); //读入学生信息
}
else
{ //头插法建立学生信息链表
linklist *p=new linklist;
REAR->next=p;
REAR=p;
p->next=NULL;
REAR->data=new student;
in.read((char *)(REAR->data),sizeof(student)); //读入学生信息
}
in.close();
}
void savefile() //存档
{
ofstream out(PATH);
out.write((char *)&N,sizeof(int)); //首先把多少个学生写进文件
for(int i=0;i<N;i++)
{
out.write((char *)(HEAD->data),sizeof(student)); //将学生信息入档

delete HEAD->data; //删除HEAD->data指向的学生

linklist *p=HEAD->next; //删除linklinklist节点
delete HEAD;
HEAD=p;
}

out.close();
}
void newstudent() //新建学生
{
linklist *p;
if(HEAD==NULL)
{
HEAD=REAR=new linklist;
HEAD->data=new student;
HEAD->data->GetInformation();
HEAD->next=NULL;
}
else
{
REAR->next=p=new linklist;
p->data=new student;
p->data->GetInformation();
p->next=NULL;
REAR=p;
}

}
void shengxu() //对学生学号升序排序
{
if(N<2) //如果学生数小于2,不用排了,直接返回
return ;
linklist *p,*k; /*k是前一个节点,P是后一个*/
for(int i=1,j;i<N;i++)
{
for(p=HEAD->next,k=HEAD,j=0;j<N-i;p=p->next,k=k->next,j++)
if(strcmp(p->data->SetNumber(),k->data->SetNumber())<0)
{
student *s=p->data;
p->data=k->data;
k->data=s;
}
}
}
void jiangxu()
{
if(N<2) //如果学生数小于2,不用排了,直接返回
return ;
linklist *p,*k; /*k是前一个节点,P是后一个*/
for(int i=1,j;i<N;i++)
{
for(p=HEAD->next,k=HEAD,j=0;j<N-i;p=p->next,k=k->next,j++)
if(strcmp(p->data->SetNumber(),k->data->SetNumber())>0)
{
student *s=p->data;
p->data=k->data;
k->data=s;
}
}
}

void InsertUp()//插入(保持升序排列)
{
linklist *s;
s=new linklist;
s->data=new student;
s->data->GetInformation();
s->next=NULL;
s->next=HEAD;
HEAD=s;
shengxu();
N++;
}
void InsertDown()//插入(保持降序排列)
{
linklist *s;
s=new linklist;
s->data=new student;
s->data->GetInformation();
s->next=NULL;
s->next=HEAD;
HEAD=s;
jiangxu();
N++;
}
void Delete(char num[])//删除
{
linklist *p,*k;
k=p=HEAD;
while(p)
{
if(strcmp(p->data->SetNumber(),num)==0)
break;
k=p;
p=p->next;
}
if(p==HEAD)
{
HEAD=HEAD->next;
delete p->data;
delete p;
N--;
}
else if(p==NULL)
{
cout<<"输入有误。请重新输入。";
}
else
{
k->next=p->next;
delete p->data;
delete p;
N--;
}

}
void Revise(char num[])//修改(修改完成后需要再进行一下升序或降序排列)
{
linklist *p;
p=HEAD;
while(p)
{
if(strcmp(p->data->SetNumber(),num)==0)
break;
p=p->next;
}
p->data->GetInformation();
p->data->ShowInformation();
}

void screen(int x)
{
if(x==0)
{
cout<<endl<<endl<<endl<<endl;
cout<<" 欢迎进入小型学生信息管理系统"<<endl;
}
else if(x==1)
{
system("cls");
cout<<"\t 学生信息管理系统 "<<endl<<endl;
cout<<"\t*************************************************************"<<endl;
cout<<"\t* 1 、新建学生信息 *"<<endl;
cout<<"\t* 2 、显示已存学生信息 *"<<endl;
cout<<"\t* 3 、删除学生信息 *"<<endl;
cout<<"\t* 4 、添加学生信息 *"<<endl;
cout<<"\t* 5 、修改学生信息 *"<<endl;
cout<<"\t* 6 、对学生信息按学号升序排列 *"<<endl;
cout<<"\t* 7 、对学生信息按学号降序排列 *"<<endl;
cout<<"\t* 8 、退出 * "<<endl;
cout<<"\t*************************************************************"<<endl;
cout<<endl<<"\t"<<"请输入:";

}
}
void Confirm()
{
char x;
cout<<"是否继续(Y/N):";
cin>>x;
if(x=='Y' || x=='y')
return ;
else if(x=='N' || x=='n')
{
savefile();
exit(0);
}
}
void cometrue(int x)
{
switch(x)
{
case 1:
{
int people;
cout<<"请输入需要新建的学生人数:";
cin>>people;
for(int i=0;i<people;i++,N++)
{
newstudent();
}
Confirm();
break;
}
case 2:
{
readin();
linklist *p;
p=HEAD;
cout<<"学号\t\t姓名\t数学\t英语\t语文"<<endl;
while(p!=NULL)
{
p->data->ShowInformation();
p=p->next;
}
//savefile();
Confirm();
break;
}
case 3:
{
// readin();
char num[20];
cout<<"请输入需要删除的学生的学号:";
cin>>num;
Delete(num);
Confirm();
break;
}
case 4:
{
int m;
cout<<"请输入插入后保持学生信息升序排列还是降序排列"<<endl;
cout<<"\t\t\t\t1、保持升序排列"<<endl<<"\t\t\t\t2、保持降序排列"<<endl;
cin>>m;
if(m==1)
InsertUp();
else if(m==2)
InsertDown();
Confirm();
break;
}
case 5:
{
char num[20];
cout<<"请输入需要修改的学生的学号:";
cin>>num;
Revise(num);
Confirm();
break;
}
case 6:
{

shengxu();
Confirm();
break;
}
case 7:
{

jiangxu();
Confirm();
break;
}
case 8:
{
char answer;
cout<<"是否存档(Y/N)"; cin>>answer;
if(answer=='Y' || answer=='y')
{
savefile();
exit(0);
}
else if(answer=='N' || answer=='n')
exit(0);
break;
}
}
}

int main()
{
int choose;
screen(0);
Sleep(1200);
while(1)
{
screen(1);
cin>>choose;
cometrue(choose);
}
return 0;
}