VC++设计:学生学籍管理系统

学生学籍管理系统
(1) 添加功能:
添加一个学生的基本信息,包括学号,姓名,性别,电话号码、寝室号码。
(2) 删除功能:
能够对一个职员的信息进行删除。
(3) 修改功能:
能够对学生的信息进行修改。
(4) 查找功能:
根据你键入的学生学号,显示其详细信息。
(6) 统计功能:
能进行总学分和加权平均分等的计算。
要求:1\提供构造函数2\类的结构3\创建新对象4\将对象输出到文件5\修改文件对象6\遍历文件7\产生英文字母后缀算法(如果有一个叫张三,那后输入的自动更正为张三A)

我这有一个
不过功能没你的这个全
你可以自己修改修改
你要就拿去吧,不要就算啦

# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <conio.h>
# define N 20

/*********************自定义函数声明部分**************************/
void showheader(); //声明显示表头部分
int menu(); //声明主菜单函数
int menu3(); //声明插入功能子菜单函数
int menu4(); //声明删除功能子菜单函数
int menu5(); //声明查找功能子菜单函数
int quanxian(); //声明用户权限管理函数
void SavePass();
struct student shuru(); //声明学生信息录入函数
void display(struct student); //声明显示函数
void sort(struct student stu[N],int); //声明排序函数
void charu(struct student stu[N],int); //声明插入函数
int del1(struct student stu[N],int); //声明按照学号删除函数
int del2(struct student stu[N],int); //声明按照姓名删除函数
void chazhao1(struct student stu[N],int i); //声明按照学号查找函数
void chazhao2(struct student stu[N],int i); //声明按照姓名查找函数

/*********定义结构体************/
struct student
{
int ID;
char name[15];
char sex;
float score[3];
char *getSex() //构造结构成员
{
if(sex=='g')
return "女";
else
return "男";
}

float Ave() //构造结构成员
{

return (score[0]+score[1]+score[2])/3;

}
student() //构造函数
{
score[0]=0;
score[1]=0;
score[2]=0;
}

};

/****************************主函数开始**************************/
void main()
{
struct student stu[N];
int count=0,m=0,j;
char ch,ch1;
int choice,choice3,choice4,choice5; //菜单选项及子菜单选项
int user;
do //此循环体控制用户信息输入错误后是否重输
{

user=quanxian(); //调用拥护权限函数
system("cls");
if(user==1) //此条件结构判断用户权限输入是否正确
{
do //此循环体控制返回主菜单
{ ch1='n'; //如果用户将主菜单选择错误,可用此变量控制是否重输
choice=menu();
system("cls");
switch(choice) //此条件结构控制选择菜单功能后的操作
{
case 1: //输入学生信息
{
do //此循环体控制是否继续输入
{ printf("****************************** 学员信息录入 **********************************\n");
printf("\n\n请输入第%d个学员的成绩:\n\n",count+1);
stu[count]=shuru(); //调用输入函数
printf("\n\n是否继续(y/n)");
fflush(stdin);
ch=getchar();
count++;
system("cls");
}while(ch=='y');
//system("pause");
break;
}

case 2: //显示排序好的学生信息
{
printf("****************************** 学员信息显示 **********************************\n");
printf("\n\n排序后的成绩如下:\n");

sort(stu,count); //调用排序函数
showheader();

for(j=0;j<count;j++)
{
display(stu[j]); //调用显示函数
}

system("pause");
system("cls");
break;
}

case 3://插入功能
{
while(choice3!=3) //此循环体控制是否退出子菜单
{
system("cls");
choice3=menu3(); //调用子菜单函数
system("cls");
if(choice3==1) //此条件结构控制子菜单选项
{
do //此循环体判断是否继续插入
{ printf("****************************** 学员信息插入 **********************************\n");
charu(stu,count); //调用插入函数
count++;

printf("是否继续插入?(y/n)");
fflush(stdin);
ch=getchar();
system("cls");
}while(ch=='y');
}
if (choice3==2) //此条件结构控制子菜单选项
{
printf("\n\n插入学生信息后如下:\n");
showheader();
for(j=0;j<count;j++)
{
display(stu[j]); //调用显示函数
}
system("pause");
}
//
}
break;
}
case 4://删除功能
{
while(choice4!=4) //此循环体控制是否退出子菜单
{
int num;
system("cls");
choice4=menu4(); //调用子菜单函数
system("cls");

if(choice4==1) //此条件结构控制子菜单按照学号删除选项

{
do //此循环体控制是否继续删除
{ printf("*********************** 按照学号删除学员信息 ************************\n");
num=del1(stu,count);//调用删除函数
//system("cls");
if(num==1)
count--;
printf("\n是否继续删除?(y/n)");
fflush(stdin);
ch=getchar();
system("cls");
}while(ch=='y');
}
if(choice4==2) //此条件结构控制子菜单按照姓名删除选项

{
do //此循环体控制是否继续删除
{ printf("************************** 按照姓名删除学员信息 ******************************\n");
num=del2(stu,count);//调用删除函数
if(num==1)
count--;
printf("\n是否继续删除?(y/n)");
fflush(stdin);
ch=getchar();
system("cls");
}while(ch=='y');
}

if(choice4==3) //此条件结构控制子菜单显示删除后的信息选项
{
printf("\n\n删除学生信息后如下:\n");
showheader();
for(j=0;j<count;j++)
{
display(stu[j]); //调用显示函数
}
system("pause");
}

}
break;
}
case 5://查找功能
{
while(choice5!=3) //控制是否继续查找
{
system("cls");
choice5=menu5(); //调用查找子菜单函数
system("cls");
if(choice5==1) //控制按照学号查找
{
chazhao1(stu,count);//调用按照学号查找的函数
system("cls");
}
if(choice5==2) //控制按照姓名查找
{
chazhao2(stu,count);//调用按照姓名查找的函数
system("cls");
}
system("pause");
}
break;
}
case 6://退出
{
printf("确认退出?(y/n)"); //让用户确认是否退出
fflush(stdin);
ch=getchar();
break;
}
default:
{
printf("\a\a警告:您输入错误,是否重输!(y/n)");
fflush(stdin);
ch1=getchar();
system("cls");
break;
}
}
}while(ch=='n'|| ch1=='y');//控制是否要退出系统
}
if(user==0)
{
printf("\a\a警告:您的用户名或密码输入有误!是否重输?(y/n)");
}
fflush(stdin);
ch=getchar();
system("cls");

}while(ch=='y');
}

/*************************主函数结束*************************/

/*自定义输入函数*/
struct student shuru()
{
struct student stu;
printf("\n\n学号:");
scanf("%d",&stu.ID);
printf("\n姓名:");
scanf("%s",stu.name);

printf("\n性别(g/b):");
fflush(stdin);
scanf("%c",&stu.sex);

printf("\n语文成绩:");
scanf("%f",&stu.score[0]);
printf("\n数学成绩:");
scanf("%f",&stu.score[1]);
printf("\n英语成绩:");
scanf("%f",&stu.score[2]);

return stu;
}

/*自定义显示函数*/
void display(struct student stu)
{
int j;

printf("\t%d\t",stu.ID);
printf("%s\t",stu.name);
printf("%s\t",stu.getSex());
for(j=0;j<3;j++)
{
printf("%.2f\t",stu.score[j]);
}

printf("%.2f\t",stu.Ave());
putchar('\n');
}

/*自定义排序函数*/
void sort(struct student stu[N],int i)
{

int j,k;
struct student temp;
for(j=0;j<i;j++)
{
for(k=0;k<i-j-1;k++)
{
if((stu[k].Ave())<(stu[k+1].Ave()))
{
temp=stu[k];
stu[k]=stu[k+1];
stu[k+1]=temp;
}
}
}

}

/*自定义插入函数*/
void charu(struct student stu[N],int k)
{
int i,l;
struct student in ;

in=shuru();//调用输入函数
for(i=0;i<k;i++)
{
if(in.Ave()>stu[i].Ave())
break;
}
for(l=k;l>i;l--)
{
stu[l]=stu[l-1];
}
stu[i]=in;
}

/*自定义按照学号删除函数*/
int del1(struct student stu[N],int i)
{
int dele,j,k;
char ch;
printf("请选择学号:");
scanf("%d",&dele);

for(j=0;j<i;j++)
{
if(dele==stu[j].ID)
{
break;
}
}
if(j<i)
{
printf("这是您要删除的学生信息\n");
showheader();
display(stu[j]);
printf("确认删除?(y/n)");
fflush(stdin);
ch=getchar();
if(ch=='y')
{
for(k=j+1;k<i;k++)
{
stu[k-1]=stu[k];
}
printf("删除成功");
return 1;
}
else
{
return 0;
}
}
else
{
printf("不存在您要删除的信息");
return 0;
}

}

/*自定义按照姓名删除函数*/
int del2(struct student stu[N],int i)
{
int j,k;
char name[15],ch;
printf("请输入姓名:");
scanf("%s",&name);

for(j=0;j<i;j++)
{
if(strcmp(name,stu[j].name)==0)
{
break;
}
}
if(j<i)
{
printf("这是您要删除的学生信息\n");
showheader();
display(stu[j]);
printf("确认删除?(y/n)");
fflush(stdin);
ch=getchar();

if(ch=='y')
{
for(k=j+1;k<i;k++)
{
stu[k-1]=stu[k];
}
printf("删除成功");
return 1;
}
else
{
return 0;
}
}
else
{
printf("不存在您要删除的信息");
return 0;
}
}

/*自定义主菜单函数*/
int menu()
{ int choice;
printf("\t\t****************************************************\n\n\t\t\t 欢迎进入学生成绩管理系统 (GLY 1.0版)\n\n\t\t****************************************************\n\n");
printf("\t\t\t***************主菜单***************\n\n");
printf("\t\t\t\t1> 学生信息录入\n\n");
printf("\t\t\t\t2> 学生信息显示\n\n");

printf("\t\t\t\t3> 插入学生信息\n\n");
printf("\t\t\t\t4> 删除学生信息\n\n");
printf("\t\t\t\t5> 查找学生信息\n\n");

printf("\t\t\t\t6> 退出\n");
printf("\n\n请选择功能选项:");
scanf("%d",&choice);

return choice;
}

/*自定义插入功能子菜单函数*/
int menu3()
{ printf("\t*******************这里显示的是插入功能子菜单*******************\n\n");
printf("\t\t\t\t1、插入学生信息\n\n");
printf("\t\t\t\t2、显示插入后的学生信息\n\n");
printf("\t\t\t\t3、退出子菜单,返回上一级菜单\n\n");

printf("\n\n请选择功能选项:");
int choice3;
scanf("%d",&choice3);
return choice3;
}

/*自定义删除功能子菜单函数*/
int menu4()
{
printf("\t*******************这里显示的是删除功能子菜单*******************\n\n");
printf("\t\t\t\t1、按照学号删除学生信息\n\n");
printf("\t\t\t\t2、按照姓名删除学生信息\n\n");
printf("\t\t\t\t3、显示删除后的学生信息\n\n");
printf("\t\t\t\t4、退出子菜单,返回上一级菜单\n\n");

printf("\n\n请选择功能选项:");
int choice4;
scanf("%d",&choice4);
return choice4;
}

/*自定义按照学号查找函数*/
void chazhao1(struct student stu[N],int i)
{
int select,j;
char ch;
printf("\t*******************您选择的是按照学号查找:*******************\n\n");
do
{
printf("\n\n请输入学号:");
scanf("%d",&select);
for(j=0;j<i;j++)
{
if(select==stu[j].ID)
{

break;
}

}
if(j<i)
{
showheader();
display(stu[j]);
}
else
{
printf("你查找的信息不存在\n");
}
printf("是否继续查找?(y/n)");
fflush(stdin);
ch=getchar();
system("cls");
}while(ch=='y');
}

/*自定义按照姓名查找函数*/
void chazhao2(struct student stu[N],int i)
{
int j;
char name[15];

char ch;
printf("\t*******************您选择的是按照姓名查找:*******************\n\n");
do
{
printf("\n\n请输入姓名:");
scanf("%s",name);

for(j=0;j<i;j++)
{
if(strcmp(name,stu[j].name)==0)
{
break;
}
}
if(j<i)
{
showheader();
display(stu[j]);
}
else
{
printf("你查找的信息不存在\n");
}

printf("是否继续查找?(y/n)");
fflush(stdin);
ch=getchar();
system("cls");
}while(ch=='y');
}

/*自定义查找功能子菜单函数*/
int menu5()
{
printf("\t*******************这里显示的是查找功能子菜单*******************\n\n");
printf("\t\t\t\t1、按照学号查找\n\n");
printf("\t\t\t\t2、按照姓名查找\n\n");
printf("\t\t\t\t3、退出子菜单,返回上一级菜单\n\n");

printf("\n\n请选择功能选项:");
int choice5;
scanf("%d",&choice5);
return choice5;
}

/*自定义用户权限函数*/
char chrPass[20];
int quanxian()
{
char user[15];
printf("\t\t*****************************************\n\n\t\t 欢迎您访问学生成绩管理系统 (GLY 1.0版)\n\n\t\t*****************************************\n\n");
printf("\n\n\t\t\t提示 用户名:hehe 密码:1982");
printf("\n\n\t\t\t用户名:");
scanf("%s",user);

printf("\n\nt\t\t\t密 码:");
SavePass();

if((strcmp(chrPass,"1982")==0)&&(strcmp(user,"hehe")==0))
return 1;
else
return 0;
}

/*密码显示为"*"的函数*/
void SavePass()
{
char chr;
int count;
count = 0;
while((chr=getch())!=13)
{
chrPass[count] = chr;
printf("*");
count++;
}
chrPass[count+1] = '\0';
}

/*自定义表头函数*/
void showheader()
{ printf("\n\n\t*********************************************************\n");
printf("\t学号\t姓名\t性别\t语文\t数学\t英语\t平均成绩\n");
printf("\t*********************************************************\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-10-24
//来啦来啦

#include <iostream>
using namespace std;
#include <stdlib.h>
double avg=0;//统计总分和加平均分权
const int mathp=4;//数学学分
const int cppp=5;//C++学分
const sum=70;//设置总学分

class Student
{
private:
int num;
char *name;
char *sex;
char *phone;
char *rphone;
double math;
double cpp;
Student* next;
public:
Student()
{next=NULL;}
~Student();
void Push(Student **refhead,int num,char *name,char *sex,char *phone,char *rphone,double math,double cpp);
void Delete(Student *head,int data);
Student* Find(Student* head,int data);
void Display(Student* head);
int Length(Student* head);
void Math(Student* head,int data);
void Update(Student* head,int data);
void Insert();
};
Student* head=new Student;//带头结点的头指针

void Student::Push(Student **refhead,int num,char *name,char *sex,char *phone,char *rphone,double math,double cpp)
{
Student* newnode=new Student;//新增加结点
newnode->num=num;
newnode->name=name;
newnode->sex=sex;
newnode->phone=phone;
newnode->rphone=rphone;
newnode->math=math;
newnode->cpp=cpp;
newnode->next=*refhead;
*refhead=newnode;//重置表头
}
//遍历
void Student::Display(Student* head)
{
Student* temp;
temp=head;
if(temp->next==NULL)//判断空表
cout<<"没有学生!";
else
{while(temp!=NULL)//
{
cout<<"学号:"<<temp->num<<"姓名:"<<temp->name<<"性别:"<<temp->sex<<"手机:"<<temp->phone<<"宿舍电话:"<<temp->rphone<<"数学成绩:"<<temp->math<<"C++成绩:"<<temp->cpp<<endl;
temp=temp->next;
}
}
return;
}
//人数
int Student::Length(Student* head)
{
Student* cur;
cur=head;
int count=0;
while(cur!=NULL)
{
count++;//通过累加统计人数
cur=cur->next;
}
return count;
}
//查找
Student* Student::Find(Student* head,int data)
{
Student* cur=head;
bool bo=false;
while(cur!=NULL)
{
if(cur->num=data)
{
bo=true;//如果找到则改变bo的值
cout<<"学号:"<<cur->num<<"姓名:"<<cur->name<<"性别:"<<cur->sex<<"手机:"<<cur->phone<<"宿舍电话:"<<cur->rphone<<"数学成绩:"<<cur->math<<"C++成绩:"<<cur->cpp<<endl;
break;
}
cur=cur->next;
}
if(bo==false)//通过判断bo的值判断找到与否
cout<<"没有这个人!"<<endl;
return cur;
}
//删除
void Student::Delete(Student* head,int data)
{
Student *bef,*cur;
bef=cur=head;
while(cur!=NULL)
{
if(cur->num==data)
break;
else
{bef=cur;cur=cur->next;}
}
if(cur==head)//如果是头结点则删除头结点
{
head=cur->next;
delete cur;
}
else
{
bef->next=cur->next;
delete cur;
}
}
//修改
void Student::Update(Student* head,int data)
{
Student* cur=head;
bool bo=false;
while(cur!=NULL)
{
if(cur->num==data)
{
bo=true;
int a,b;
char *c;
double d;
for(;;) //找到后提供各字段的修改
{ cout<<"1修改学号|2修改姓名|3修改性别|4修改手机号|5修改宿舍电话号|6修改数学成绩|7修改C++成绩|8退出\n";
cin>>a;
switch(a)
{
case 1:cout<<"输入新学号:";
cin>>b;
cur->num=a;
break;
case 2:cout<<"输入新姓名:";
cin>>c;
cur->name=c;
break;
case 3:cout<<"输入新性别:";
cin>>c;
cur->sex=c;
break;
case 4:cout<<"输入新手机号:";
cin>>c;
cur->phone=c;
break;
case 5:cout<<"输入新宿舍电话号:";
cin>>c;
cur->rphone=c;
break;
case 6:cout<<"输入新数学成绩:";
cin>>d;
cur->math=d;
break;
case 7:cout<<"输入C++成绩:";
cin>>d;
cur->cpp=d;
break;
case 8:exit(1);
break;
default:cout<<"操作错误";
break;
}
}
break;
}
}
if(bo==false)
cout<<"没有这个人!"<<endl;
return;
}
//统计
void Student::Math(Student* head,int data)
{
Student* cur=head;
bool bo=false;
while(cur!=NULL)
{
if(cur->num=data)
{
bo=true;
avg=cur->math*(mathp/sum)+cur->cpp*(cppp/sum);//计算总分和加平均分权的公式
break;
}
cur=cur->next;
}
if(bo==false){
cout<<"没有这个人!"<<endl;
return;
}
cout<<"该生的总分和加平均分权="<<avg<<endl;
return;
}
//录入
void Student::Insert()
{
head=NULL;
int num;
char name[8];
char sex[4];
char phone[11];
char rphone[7];
double math;
double cpp;
cout<<"请输入基本信息:\n";
cout<<"学号:";
cin>>num;
cout<<"姓名:";
cin>>name;
cout<<"性别:";
cin>>sex;
cout<<"手机号:";
cin>>phone;
cout<<"宿舍电话:";
cin>>rphone;
cout<<"数学成绩:";
cin>>math;
cout<<"C++成绩:";
cin>>cpp;
Push(&head,num,name,sex,phone,rphone,math,cpp);//调用函数Push建立有序链表
}
//用释构函数逐个释放空间
Student::~Student()
{
while(head!=NULL)
{
delete head;
head=head->next;
}
}
//程序主入口
void main()
{
for(;;)
{
head=NULL;
Student s;
int x;
int data;
cout<<"|1录入|2查找|3删除|4修改|5统计|6退出|\n";
cout<<"请作选择:\n";
cin>>x;
switch(x)
{
case 1:
start:
s.Insert();
cout<<"继续吗?[Y/N]";
char ch;
cin>>ch;
if(ch=='y' || ch=='Y')
goto start;
s.Display(head);
int l;
l=s.Length(head);
cout<<"一共有"<<l<<"个学生。"<<endl;
break;
case 2:
cout<<"请输入你要查找的学生的学号:";
cin>>data;
s.Find(head,data);
break;
case 3:
cout<<"请输入你要删除的学生的学号:";
cin>>data;
s.Delete(head,data);
break;
case 4:
cout<<"请输入你要修改的学生的学号:";
cin>>data;
s.Update(head,data);
break;
case 5:
cout<<"请输入你要统计的学生的学号:";
cin>>data;
s.Math(head,data);
break;
case 6:
exit(1);
break;
default:cout<<"操作错误!"<<endl;
break;
}
}
}
第2个回答  2006-10-27
是我们软件学院的吧,现在正在做这个呢