设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1362|回复: 9
打印 上一主题 下一主题

[讨论]学生成绩管理(VC++)(已更新)

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 02:06:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//我自己编的学员管理系统 帮我完善一下吧 谢谢
#include<iostream.h>
#include <cstdlib>
#include"need.h"
void main()
{
int n;
cout<<"欢迎登陆学员成绩管理系统!!"<<endl;
cout<<"您能进行的操作如下:"<<endl;
cout<<endl<<endl;
cout<<"1.学员登记(学号/姓名/成绩)"<<endl;
cout<<"2.学员查找"<<endl;
cout<<"3.打印成绩单"<<endl;
cout<<"4.插入学员成绩"<<endl;
cout<<"5.删除学员"<<endl;
cout<<"6.学员排序"<<endl;
cout<<"7.退出系统"<<endl<<endl;
cout<<"请选择您要进行的操作(数字1-7):";

lable:
{
cin>>n;
switch(n)
{

case 1:
cout<<"开始登记学员信息..."<<endl;
enregister<stu>();
cout<<"登记完毕,请选择其他操作:";
goto lable;
case 2:
cout<<"开始查找所需学员..."<<endl;
findstudent<stu>();
cout<<"查找完毕,请选择其他操作:";
goto lable;
case 3:
cout<<"打印学生的成绩单..."<<endl;
print<stu>();
cout<<"修改完毕,请选择其他操作:";
goto lable;
case 4:
cout<<"进行修改,插入学员..."<<endl;
insert<stu>();
cout<<"修改完毕,请选择其他操作:";
goto lable;
case 5:
cout<<"清理已经登陆的学员信息..."<<endl;
deletestudent<stu>();
cout<<"清理完毕,请选择其他操作:";
goto lable;
case 6:
cout<<"将已登记的学员排序,请稍候..."<<endl;
inorder<stu>();
cout<<"排序完毕,请选择其他操作:";
goto lable;
case 7:
system("pause");
cout<<"退出本系统,欢迎下次使用,再见!!!"<<endl;
break;
default:
cout<<"输入字母错误,请重新输入:";
goto lable;
}
}
}



//头文件在这里 共两个 "cnode.h"和"need.h"

//cnode.h
#ifndef CIRCULAR_NODE_CLASS
#define CIRCULAR_NODE_CLASS
template <class T>
class CNode
{
private:
// circular link to the next node
CNode<T> *next;
public:
// data is public
T data;

// constructors
CNode(void);
CNode (const T& item);

// list modification methods
void InsertAfter(CNode<T> *p);
CNode<T> *DeleteAfter(void);

// obtain the address of the next node
CNode<T> *NextNode(void) const;
};
// constructor that creates an empty list and
// leaves the data uninitialized. use for header
template <class T>
CNode<T>::CNode(void)
{
// initialize the node so it points to itself
next = this;
}
// constructor that creates an empty list and initializes data
template <class T>
CNode<T>::CNode(const T& item)
{
// set node to point to itself and initialize data
next = this;
data = item;
}

// return pointer to the next node
template <class T>
CNode<T> *CNode<T>::NextNode(void) const
{
return next;
}
// insert a node p after the current one
template <class T>
void CNode<T>::InsertAfter(CNode<T> *p)
{
// p points to successor of the current node, and current node
// points to p.
p->next = next;
next = p;
}
// delete the node following current and return its address
template <class T>
CNode<T> *CNode<T>::DeleteAfter(void)
{
// save address of node to be deleted
CNode<T> *tempPtr = next;

// if next is the address of current object (this), we are
// pointing to ourself. We don't delete ourself! return NULL
if (next == this)
return NULL;

// current node points to successor of tempPtr.
next = tempPtr->next;

// return the pointer to the unlinked node
return tempPtr;
}
#endif // CIRCULAR_NODE_CLASS



//need.h
#include<iostream.h>
//#include<fstream.h>
#include"cnode.h"
struct stu
{
double num;
char name;
int score;
}std;
CNode<stu>*head=new CNode<stu>();
template<class T>
void enregister(void) //建立一个data域是stu类型的循环链表
{
CNode<T>*p,*ptr; //存储打入的学员信息
ptr=head;
struct stu std;
// int n=1;
while(1)
{
cout<<"请输入学员的学号/姓名/成绩:"<<endl;
cin>>std.num>>std.name>>std.score;
// ifstream in("data.txt");
if(std.num==0) break;
p=new CNode<T>(std);
if(head->NextNode()==head)
{
head->InsertAfter(p);
ptr=p;
}
else
{
ptr->InsertAfter(p);
ptr=p;
}
}
}

template<class T>
void print(void)
{
CNode<T>*ptr;
struct stu stp;
ptr=head->NextNode();
/* if(ptr==head)
{
cout<<"现在没有学员登记,请先进行学员登记"<<endl;
enregister();
}
else*/
while(ptr!=head)
{
stp=ptr->data;
cout<<stp.num<<" ";
cout<<stp.name<<" "<<stp.score<<" ";
ptr=ptr->NextNode();
cout<<endl;
}
}
template<class T>
void findstudent()
{
struct stu stp,st;
double n=1,m;
CNode<T>*ptr=head->NextNode();
st=stp=ptr->data;
m=stp.num;
while(n!=0)
{
cout<<"请输入需要查找的学员的学号(输入0结束):";
cin>>n;
while(ptr!=head && n!=m)
{
ptr=ptr->NextNode();
st=ptr->data;
m=st.num;
}
if(ptr==head)
cout<<"这个学员不存在。"<<endl;
else
{
cout<<st.num<<" ";
cout<<st.name<<" "<<st.score<<" ";
}
ptr=head->NextNode();
cout<<endl;
}
}

template<class T>
void insert(void)
{
// struct stu std;
CNode<T>*ptr,*p;
int n=1;
ptr=head->NextNode();
while(n!=0)
{
while(ptr->NextNode()!=head)
ptr=ptr->NextNode();
cout<<"输入需要插入学员的信息:"<<endl;
cin>>std.num>>std.name>>std.score;
p=new CNode<T>(std);
ptr->InsertAfter(p);
cout<<"输入结束,输入0结束,其他数字继续。。。"<<endl;
cin>>n;
}
}

template<class T>
void deletestudent(void)
{
struct stu st;
CNode<T>*ptr=head->NextNode(),*p;
double n=1,m;

while(n!=0)
{
p=head;
st=ptr->data;
m=st.num;
cout<<"请输入要删除的学员的学号:(输0结束)";
cin>>n;
while(ptr!=head && n!=m)
{
p=ptr;
ptr=ptr->NextNode();
st=ptr->data;
m=st.num;
}
if(ptr==head)
{
cout<<"这个学员不存在。"<<endl;
break;
}
else
p->DeleteAfter();
ptr=head->NextNode();
cout<<endl;
}
}
template<class T>
void inorder()
{
CNode<T>*ptr,*p;
double m,n;
struct stu str,st,stp;
for(ptr=head->NextNode();ptr->NextNode()!=head;ptr=ptr->NextNode())
for(p=ptr->NextNode();p!=head;p=p->NextNode())
{
str=ptr->data;stp=p->data;
m=str.score;n=stp.score;
if(m>n)
{
st=str;str=stp;stp=st;
}
}
}


求教:
1。登记函数中只能输入1w1的信息,输入0o0结束,怎样修改结构体内的类型能输入0444025+汉字+数字的结构
2。排序有点问题
3。不太人性化,
麻烦大家能抽空看下,给我提出些意见,谢谢!!!
2#
发表于 2009-11-4 02:06:31 | 只看该作者
呵呵,不错,代码很长啊,看还需要点时间,先顶一下
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-4 02:06:32 | 只看该作者
和我写程序的习惯不一样
我不太理解你的想法
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-4 02:06:33 | 只看该作者
能详细的说一下么,或者发出你的解法来看下
和我写程序的习惯不一样
我不太理解你的想法
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-4 02:06:34 | 只看该作者
刚刚上去试了一下你的程序,
第一个感觉——真的不人性化,名字输入时,怎么只能输一个字母???
建议用字符数组存名字和学号,程序不容易崩溃。其他还没看。
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-4 02:06:35 | 只看该作者
谢谢大家的参与,我的程序已经更新完毕,希望大家提出宝贵意见
//main函数
#include<iostream.h>
#include <cstdlib>
#include"need.h"
void main()
{
int n;
cout<<endl<<endl;
cout<<"欢迎登陆学员成绩管理系统!!"<<endl<<endl;
cout<<"*****************************************"<<endl<<endl;
cout<<"首先从文件中读取学员信息(学号/姓名/成绩)..."<<endl<<endl;
enregister<stu>();
cout<<"读取完毕"<<endl;
cout<<"-----------------------------------------"<<endl;
cout<<"您能进行的操作如下:"<<endl;
cout<<endl<<endl;
lable:
cout<<"1.打印成绩单"<<endl;
cout<<"2.学员查找"<<endl;
cout<<"3.插入学员成绩"<<endl;
cout<<"4.删除学员"<<endl;
cout<<"5.学员排序"<<endl;
cout<<"0.退出系统"<<endl<<endl;
cout<<"请选择您要进行的操作(数字1-5):";

{
cin>>n;
switch(n)
{
case 1:
cout<<"\n学生成绩单如下"<<endl;
cout<<"-----------------------------------------"<<endl;
print<stu>();
cout<<"-----------------------------------------"<<endl;
cout<<"\n打印完毕,请选择其他操作:"<<endl;
goto lable;

case 2:
findstudent<stu>();
cout<<"查找完毕,请选择其他操作:"<<endl;
goto lable;
case 3:
insert<stu>();
cout<<"-----------------------------------------"<<endl<<endl;
cout<<"修改完毕,请选择其他操作:"<<endl;
goto lable;
case 4:
cout<<"删除学员信息..."<<endl<<endl;
deletestudent<stu>();
cout<<"清理完毕,请选择其他操作:"<<endl;
goto lable;
case 5:
inorder<stu>();
cout<<"排序完毕,请选择其他操作:"<<endl<<endl;
goto lable;
case 0:
cout<<"\n退出本系统,欢迎下次使用,再见!!!"<<endl;
cout<<"*****************************************"<<endl<<endl;
break;
default:
cout<<"输入字母错误,请重新选择:"<<endl;
goto lable;
}
}
}


\\need.h函数
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
#include"cnode.h"
struct stu
{
char num[30];
char name[30];
double score;
};
CNode<stu>*head=new CNode<stu>();
template<class T>
void enregister(void)
{
ifstream in;
in.open("dengji.txt");
if(in.fail())
{
cerr<<"Error is happen,founction closed!";
exit(-1);
}
CNode<T>*p,*ptr;
ptr=head;
struct stu std;
while(in>>std.num)
{
in>>std.name;
in>>std.score;
p=new CNode<T>(std);
ptr->InsertAfter(p);
ptr=p;
}
in.close();
}

template<class T>
void print(void)
{
CNode<T>*ptr;
struct stu stp;
ptr=head->NextNode();
cout<<"学号"<<" "<<"姓名"<<" "<<"成绩"<<endl;
while(ptr!=head)
{
stp=ptr->data;
cout<<setw(7)<<setiosflags(ios::left)<<stp.num<<" ";
cout<<setw(10)<<setiosflags(ios::left)<<stp.name<<" "<<setw(7)<<setiosflags(ios::left)<<stp.score;
cout<<resetiosflags(ios::left);
ptr=ptr->NextNode();
cout<<endl;
}
}
template<class T>
void findstudent()
{
struct stu stp;
char n[30];
char m='y';
CNode<T>*ptr=head->NextNode();
while(m!='n')
{
cout<<endl;
cout<<"输入需要查找学员的学号:";
cin>>n;
stp=ptr->data;
while(ptr!=head && strcmp(n,stp.num))
{
ptr=ptr->NextNode();
stp=ptr->data;
}
if(ptr==head)
{
cout<<"-----------------------------------------"<<endl;
cout<<"这个学员不存在。"<<endl;
cout<<"-----------------------------------------"<<endl;
}
else
{
cout<<"-----------------------------------------"<<endl;
cout<<stp.num<<" ";
cout<<stp.name<<" "<<stp.score<<endl;
cout<<"-----------------------------------------"<<endl;
}
ptr=head->NextNode();
cout<<"是否继续进行查找(y/n):";
cin>>m;
}
cout<<endl;
}

template<class T>
void insert(void)
{
ofstream out;
out.open("shuchu.txt");
struct stu std;
CNode<T>*ptr,*p,*q;
double n;
char m='y';
ptr=head->NextNode();
q=head;
if(out.fail())
{
cerr<<"Error is happen,founction closed!";
exit(-1);
}
while(m!='n')
{
cout<<"输入需要插入学员的信息..."<<endl;
cout<<"学号:";
cin>>std.num;
cout<<"姓名:";
cin>>std.name;
cout<<"成绩:";
cin>>std.score;
p=new CNode<T>(std);
n=std.score;
while(ptr!=head&&n>ptr->data.score)
{
q=ptr;
ptr=ptr->NextNode();
}
q->InsertAfter(p);
ptr=head->NextNode();
for(p=head->NextNode();p!=head;p=p->NextNode())
{
out<<setw(7)<<setiosflags(ios::left)<<p->data.num;
out<<setw(10)<<setiosflags(ios::left)<<p->data.name;
out<<setw(7)<<setiosflags(ios::left)<<p->data.score<<endl;
out<<resetiosflags(ios::left);
}
out.close();
cout<<"是否继续进行插入(y/n):";
cin>>m;
}
cout<<endl;
}

template<class T>
void deletestudent(void)
{
struct stu ;
CNode<T>*ptr=head->NextNode(),*p;
char n[30]="1";
char m='y';
while(m!='n')
{
p=head;
cout<<"输入要删除学员的学号:";
cin>>n;
while(ptr!=head && strcmp(n,ptr->data.num))
{
p=ptr;
ptr=ptr->NextNode();
}
cout<<"\n-----------------------------------------"<<endl;
if(ptr==head)
cout<<"这个学员不存在。";
else
{
p->DeleteAfter();
cout<<"学员"<<n<<"被删除";
}
cout<<"\n-----------------------------------------"<<endl;
ptr=head->NextNode();
cout<<endl;
cout<<"是否继续进行删除(y/n):";
cin>>m;
}
cout<<endl;
}
template<class T>
void inorder()
{
CNode<T>*ptr,*p;
double m,n;
struct stu st;
for(ptr=head->NextNode();ptr->NextNode()!=head;ptr=ptr->NextNode())
for(p=ptr->NextNode();p!=head;p=p->NextNode())
{
m=ptr->data.score;n=p->data.score;
if(m>n)
{
st=ptr->data;ptr->data=p->data;p->data=st;
}
}
cout<<endl;
}


\\cnode.h函数
#ifndef CIRCULAR_NODE_CLASS
#define CIRCULAR_NODE_CLASS
template <class T>
class CNode
{
private:
// circular link to the next node
CNode<T> *next;
public:
// data is public
T data;

// constructors
CNode(void);
CNode (const T& item);

// list modification methods
void InsertAfter(CNode<T> *p);
CNode<T> *DeleteAfter(void);

// obtain the address of the next node
CNode<T> *NextNode(void) const;
};
// constructor that creates an empty list and
// leaves the data uninitialized. use for header
template <class T>
CNode<T>::CNode(void)
{
// initialize the node so it points to itself
next = this;
}
// constructor that creates an empty list and initializes data
template <class T>
CNode<T>::CNode(const T& item)
{
// set node to point to itself and initialize data
next = this;
data = item;
}

// return pointer to the next node
template <class T>
CNode<T> *CNode<T>::NextNode(void) const
{
return next;
}
// insert a node p after the current one
template <class T>
void CNode<T>::InsertAfter(CNode<T> *p)
{
// p points to successor of the current node, and current node
// points to p.
p->next = next;
next = p;
}
// delete the node following current and return its address
template <class T>
CNode<T> *CNode<T>::DeleteAfter(void)
{
// save address of node to be deleted
CNode<T> *tempPtr = next;

// if next is the address of current object (this), we are
// pointing to ourself. We don't delete ourself! return NULL
if (next == this)
return NULL;

// current node points to successor of tempPtr.
next = tempPtr->next;

// return the pointer to the unlinked node
return tempPtr;
}
#endif // CIRCULAR_NODE_CLASS



\\TXT文件
\\"dengji.txt"
07703 刘志海 67
06404 王帅 57
06005 尹浩 76
70006 刘松杨 88
44007 徐国旺 77
44009 孙晶晶 97
06010 何燕辉 33
04012 车少君 68
44015 刘兆洋 66

更新的内容
1。输入采用重记事本输入
2。优化了结构,程序更加人性化

希望大家能多提出宝贵意见谢谢!!
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-4 02:06:37 | 只看该作者
太难了,我看不懂,先顶一下
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-4 02:06:39 | 只看该作者
帅哥能不能给份 程序任务书啊!
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-4 02:06:40 | 只看该作者
好像用C写的一样,看来小程序还得用C完成
回复 支持 反对

使用道具 举报

10#
发表于 2009-11-4 02:06:42 | 只看该作者
有点复杂,  写个这样的系统没必要这么多
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 00:44 , Processed in 0.126975 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表