文章目录:
学生信息管理系统,C++实现的源代码
#include iostream
#includefstream
#includestring
using namespace std;
class student
{
public:
void setdate();//录入
void chazhao();//查找
void showdate();//输出
//void change();//修改
void del();//删除
private:
student *next,*head;
string name;
int age;
};
void student::setdate()
{
int n;
cout"请输入所要录入的学生人数:"endl;
cinn;
student *p,*s;
int i;
for(i=0;in;i++)
{
p=new student;
cout"分别输入学生的年龄和姓名:";
cinp-agep-name;
if(i==0)
head=s=p;
else s-next=p;
p-next=NULL;
s=p;
}
ofstream fout("d://program//test.txt",ios::out);
if(!fout){cout"cannot open file.";}
for(i=0;in;i++)
{
fouthead-age" "head-nameendl;
head=head-next;
}
fout.close();
}
void student::showdate()
{
student *p;
ifstream fout1("d://program//test.txt",ios::in);
if(!fout1){cout"cannot open file.\n";exit(1);}
p=new student;
while(fout1.good())
{
fout1p-agep-name;
if(fout1.good())
coutp-age" "p-nameendl;
}
fout1.close();
}
void student::chazhao()
{
string a;
int k=0;
cout"输入你要查找的学生的姓名:\n";
cina;
student *p;
ifstream fout1("d://program//test.txt",ios::in);
if(!fout1){cout"cannot open file.\n";exit(1);}
while(fout1.good())
{
p=new student;
fout1p-agep-name;
if(p-name==a)
{
coutp-age" "p-nameendl;
k=1;
break;
}
}
if(k==0) cout"你所查找的学生不存在!!!\n";
fout1.close();
}
void student::del()
{
student *p,*op;
string namea;
cout"输入你所要删除的学生的姓名:\n";
cinnamea;
ifstream fout("d://program//test.txt",ios::in);
if(!fout){cout"cannot open file.";}
while(fout.good())
{
p=new student;
int i=0;
foutp-agep-name;
if(p-name==nameai==0)
{
delete p;
break;
}
else if(p-name==nameai!=0)
{
op-next=p-next;
delete p;
break;
}
else
{
op=p;
p=p-next;
}
i++;
}
cout"删除成功!!!\n";
fout.close();
}
int main()
{
student duixiang;
int m;
cout"-------------欢迎使用我的成绩管理系统!\n";
cout"--------------------1.录入学生信息\n";
cout"--------------------2.输出学生信息\n";
cout"--------------------3.查找学生信息\n";
cout"--------------------4.删除学生信息\n";
cout"--------------------5.退出系统\n";
cout"请选择所要执行的操作(1~4):\n";
cinm;
switch(m)
{
case 1:duixiang.setdate();
case 3:duixiang.chazhao();
//case 3:duixiang.change();break;
case 4:duixiang.del();break;
case 2:duixiang.showdate();
case 5:break;
}
return 0;
}
/*void menu::shanchu() {
system("cls") ;
char ch[10] ;
cout"\n *** 删除信息 ***\n"endl ;
cout"\n 请输入要删除人的姓名 : " ;
cinch ;
addbook *p , *p1 ;
p1 = head ;
while( p1 )
{
// coutch" "p1-nameendl ; // 查找结点
if(strcmp( p1-name , ch ) == 0 )
break ;
else {
p = p1 ; // 标记相连结点位置,删除后可连接
p1 = p1-next ;
}
}
if( p1!= NULL )
{ // 判断结点是否为空
cout"所要删除的名片的信息如下,请确认!:\n"endl ;
output(p1) ; // 函数输出名片信息
cout"请再次确认是否删除该信息!!!(Y/N) :" ;
char c[10] ;
while(1)
{
cinc ;
if( toupper(c[0]) == 'Y' c[1]=='\0' )
{
if( p1 == head )
{ // 判断是否是第一个结点
head = p1-next ;
delete p1 ;
}
else
{
p-next = p1-next ; // 已标记结点的连接
delete p1 ;
}
cout"\t\t *** 删除成功 *** \t\t\n" ;
system("cls") ;
cout"\n\n\n\n\n" ;
cout"\t\t *** 是否继续删除 *** \t\t\n" ;
cout"*** 请确认(Y/N) :" ;
while(1)
{
cinc;
if( toupper(c[0]) == 'Y' c[1]=='\0' )
shanchu() ;
else if( toupper(c[0]) == 'N' c[1]=='\0' )
return ;
else cout"输入错误 , 请重新输入(Y/N) :" ;
}
}
else if( toupper(c[0]) == 'N' c[1]=='\0' ) return ;
else cout"输入错误 , 请重新输入(Y/N) :" ;
}
}
else {
cout"\n\n\n未找到该信息!!!"endl ;
system("pause") ;
return ;
}
}
*/
学生信息管理系统C++源代码
#includeiostream
#includestdlib.h
#includestring.h
#includemalloc.h
#define INIT_SIZE 10
#define INCRE_SIZE 10
#define SUBJECT_NUM 3
#define LEN 3
void show_Start();
void show_Table();
void addRecord();
void Info_delete();
void deleteRecord();
void delete_Num(int);
void delete_Name(char tarName[]);
void Info_modify();
void modifyRecord();
void modify_Num(int);
void modify_Name(char[]);
void Info_query();
void queryRecord();
void query_Num(int);
void query_Name(char[]);
void display();
void quit();
void menu_CMD();
char *subject[SUBJECT_NUM] = {"高代","数分","C语言"};
struct STUDENT
{
int num;
char name[20];
char sex;
float score[SUBJECT_NUM];
};
//struct STUDENT stu[LEN + 1];
//STUDENT *record = (STUDENT*)malloc(sizeof(STUDENT)*INIT_SIZE);
int static stuNum = 0;
//先暂时定义三个学生吧...
STUDENT *record = (STUDENT*)malloc(sizeof(STUDENT)*INIT_SIZE);;
int main()
{
//record = (STUDENT*)malloc(sizeof(STUDENT)*INIT_SIZE);
//STUDENT *record = (STUDENT*)malloc(sizeof(STUDENT)*INIT_SIZE);
/*
record[1].num = 1001;
strcpy(record[1].name,"Jason");
record[1].sex = 'M';
record[1].score[0] = 85.0;
record[1].score[1] = 90.0;
record[1].score[2] = 95.0;
record[2].num = 1002;
strcpy(record[2].name,"Jerry");
record[2].sex = 'M';
record[2].score[0] = 85.0;
record[2].score[1] = 90.0;
record[2].score[2] = 95.0;
record[3].num = 1003;
strcpy(record[3].name,"Jessie");
record[3].sex = 'F';
record[3].score[0] = 85.0;
record[3].score[1] = 90.0;
record[3].score[2] = 95.0;
*/
/*
Info_modify();
int key;
cout"请输入您的选择 : ";
cinkey;
if(key == 1)
{
int targetNum;
cout"请输入您欲修改的学生的学号 : ";
cintargetNum;
modify_Num(targetNum);
coutendl;
display();
}
if(key == 2)
{
char targetName[20];
cout"请输入您欲修改学生的姓名 : ";
cintargetName;
modify_Name(targetName);
coutendl;
display();
}
if(key == 3)
{
exit(0);
}
*/
show_Start();
menu_CMD();
return 0;
}
//修改完后还应该显示
void show_Start()
{
//coutendl;
cout" **************************************** "endl;
cout" 这是一个 "endl;
cout" 学生成绩管理系统 "endl;
cout" 可以对学生成绩进行管理 "endl;
cout" 欢迎大家使用 "endl;
cout" Made by Jason "endl;
cout" **************************************** "endl;
}
// 显示表头信息,即是 : 学号,姓名,性别,高代,数分,C语言.
void show_Table()
{
cout"学号""\t""姓名""\t""性别";
cout"\t"subject[0]"\t"subject[1]"\t"subject[2];
coutendl;
}
void menu_CMD()
{
int key;
while(1)
{
cout"1. 增加学生信息"endl;
cout"2. 删除学生信息"endl;
cout"3. 修改学生信息"endl;
cout"4. 查询学生信息"endl;
cout"5. 显示学生信息"endl;
cout"6. 退出"endl;
cout"请输入您的选择 : ";
cinkey;
while(1)
{
if((key 1)||(key 6))
{
int key;
cout"您的输入有误,请重新输入!"endl;
cout"请选(1 - 5) : ";
cinkey;
}
else
{
break;
}
}
switch(key)
{
case 1:
addRecord();
break;
case 2:
deleteRecord();
break;
case 3:
modifyRecord();
break;
case 4:
queryRecord();
break;
case 5:
display();
break;
case 6:
quit();
break;
}
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//增加学生信息
void addRecord()
{
if(stuNum == 0)
{
cout"原来没有记录,现在建立新表!"endl;
stuNum++;
}
else
{
cout"现在在当前表的末尾添加新的信息!"endl;
stuNum++;
}
//如果数组空间不够,重新申请空间
if(stuNum INIT_SIZE)
{
cout"内存空间不够,现在重新申请新的内存空间!"endl;
record = (STUDENT*)realloc(record,(INIT_SIZE + INCRE_SIZE)*sizeof(STUDENT));
cout"空间申请完成!"endl;
}
cout"您现在要添加一组新的信息,您确定吗?"endl;
cout"请输入您的选择(Y/N) : ";
char choi;
cinchoi;
if((choi == 'Y')||(choi == 'y'))
{
cout"请输入学号 : ";
cinrecord[stuNum].num;
cout"请输入姓名 : ";
cinrecord[stuNum].name;
cout"请输入性别(M为男,F为女) : ";
cinrecord[stuNum].sex;
int i;
for(i = 0;i SUBJECT_NUM;i++)
{
cout"请输入"subject[i]"的成绩 : ";
cinrecord[stuNum].score[i];
}
}
if((choi == 'N')||(choi == 'n'))
{
cout"退出添加新学生信息!"endl;
coutendl;
}
cout"现在已经有"stuNum"条学生的信息了!"endl;
coutendl;
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//删除信息 晚上完成...
//显示deleteRecord的表头信息
void Info_delete()
{
cout"请输入删除方式 : "endl;
cout"1. 按学号删除"endl;
cout"2. 按姓名删除"endl;
cout"3. 退出删除"endl;
}
//删除学生的信息,包含两个子函数
void deleteRecord()
{
int key;
coutendl;
Info_delete();
cout"请输入您的选择 : ";
cinkey;
if(key == 1)
{
int targetNum;
cout"请输入您欲删除学生的学号 : ";
cintargetNum;
//按学号删除
delete_Num(targetNum);
coutendl;
}
if(key == 2)
{
char targetName[20];
cout"请输入您欲删除学生的姓名 : ";
cintargetName;
//按姓名删除
delete_Name(targetName);
coutendl;
}
if(key == 3)
{
while(1)
{
menu_CMD();
}
}
}
//按学号删除学生信息
//只用完成删除操作,而不必输出. 输出的操作可以在主菜单中进行
void delete_Num(int tarNum)
{
int i;
for(i = 1;i = stuNum;i++)
{
if(record[i].num == tarNum)
{
//删除还要分两种情况讨论
//1. 欲删除的学生信息是最后一位
//2. 欲删除的学生信息不是最后一位
//第一种情况,欲删除的学生是最后一位
if(i = stuNum)
{
cout"您所要删除的学生信息是 : "endl;
show_Table();
coutrecord[i].num"\t"record[i].name"\t"record[i].sex"\t"
record[i].score[0]record[i].score[1]"\t"record[i].score[2];
coutendl;
coutendl"删除后学生信息表为 : "endl;
show_Table();
for(int i = 1;i = stuNum - 1;i++)
{
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
for(int j = 0;j SUBJECT_NUM;j++)
{
cout"\t"record[i].score[j];
}
coutendl;
}
//显示信息应该放在后面
/*
stuNum--;
cout"现在还剩下"stuNum"条学生的信息";
coutendl;
*/
}
//2.第二种情况,欲删除的学生不是最后一位
if(i != stuNum)
{
cout"您所要删除的学生信信息是 : "endl;
show_Table();
coutrecord[i].num"\t"record[i].name"\t"record[i].sex"\t"
record[i].score[0]"\t"record[i].score[1]"\t"record[i].score[2];
for(int j = i+1;j = stuNum;j++)
{
record[j-1] = record[j];
}
//接着完成输出
coutendl;
cout"删除后学生信息表为 : "endl;
show_Table();
for(int i = 1;i = stuNum-1;i++)
{
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
for(int j = 0;j SUBJECT_NUM;j++)
{
cout"\t"record[i].score[j];
}
coutendl;
}
/*
stuNum--;
cout"现在还剩下"stuNum"条学生的信息";
coutendl;
*/
}
stuNum--;
cout"现在还是剩下"stuNum"条学生的信息";
coutendl;
}
}
}
/*
//方法同上
void delete_Name(char tarName[])
{
int i;
for(i = 1;i = stuNum;i++)
{
if(strcmp(record[i].name,tarName) == 0)
{
//删除还要分两种情况讨论
//1. 欲删除的学生信息是最后一位
//2. 欲删除的学生信息不是最后一位
//第一种情况 : 欲删除学生是最后一位
if(i = stuNum)
{
cout"您所要删除的学生信息是 : "endl;
show_Table();
coutrecord[i].num"\t"record[i].name"\t"record[i].sex"\t"
record[i].score[0]record[i].score[1]"\t"record[i].score[2];
coutendl;
coutendl"删除后学生信息表为 : "endl;
show_Table();
for(int i = 1;i = stuNum - 1;i++)
{
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
for(int j = 0;j SUBJECT_NUM;j++)
{
cout"\t"record[i].score[j];
}
coutendl;
}
}
//第二种情况 : 欲删除学生不是最后一位
if(i != stuNum)
{
cout"您所要删除的学生信信息是 : "endl;
show_Table();
coutrecord[i].num"\t"record[i].name"\t"record[i].sex"\t"
record[i].score[0]"\t"record[i].score[1]"\t"record[i].score[2];
//整体往前 前移一位
for(int j = i+1;j = stuNum;j++)
{
record[j-1] = record[j];
}
coutendl;
//接着完成输出
cout"删除后学生信息表为 : "endl;
show_Table();
for(int i = 1;i = stuNum-1;i++)
{
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
for(int j = 0;j SUBJECT_NUM;j++)
{
cout"\t"record[i].score[j];
}
coutendl;
}
coutendl;
}
}
}
}
*/
void delete_Name(char tarName[])
{
int i;
for(i = 1;i = stuNum;i++)
{
//删除还要分两种情况讨论
//1. 欲删除的学生信息是最后一位
//2. 欲删除的学生信息不是最后一位
//当欲删除的学生是最后一位,直接输出前面LEN-1位学生的信息
if(strcmp(record[i].name,tarName) == 0)
{
if(i == stuNum)
{
cout"您所要删除的学生信息是 : "endl;
show_Table();
coutrecord[i].num"\t"record[i].name"\t"record[i].sex"\t"
record[i].score[0]"\t"record[i].score[1]"\t"record[i].score[2];
coutendl;
cout"删除后学生信息表为 : "endl;
show_Table();
for(int i = 1;i = stuNum-1;i++)
{
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
for(int j = 0;j SUBJECT_NUM;j++)
{
cout"\t"record[i].score[j];
}
coutendl;
}
/*
stuNum--;
cout"现在还剩下"stuNum"条学生的信息";
coutendl;
*/
}
//当欲删的学生不是最后一位,整体往前前移一位
if(i != stuNum)
{
cout"您所要删除的学生信息是 : "endl;
show_Table();
coutrecord[i].num"\t"record[i].name"\t"record[i].sex"\t";
coutrecord[i].score[0]"\t"record[i].score[1]"\t"record[i].score[2];
coutendl;
//整体往前前移一位
for(int j = i+1;j = stuNum;j++)
{
record[j-1] = record[j];
}
//然后输出
coutendl;
cout"删除后学生信息表为 : "endl;
show_Table();
for(int i = 1;i = stuNum-1;i++)
{
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
for(int j = 0;j SUBJECT_NUM;j++)
{
cout"\t"record[i].score[j];
}
coutendl;
}
/*
stuNum--;
cout"现在还剩下"stuNum"条学生的信息";
coutendl;
*/
}
stuNum--;
cout"现在还剩下"stuNum"条学生的信息";
coutendl;
}
}
}
/*****************************************************************************
******************************************************************************/
//显示modifyRecord的表头信息
void Info_modify()
{
cout"请输入修改方式 : "endl;
cout"1. 按学号修改"endl;
cout"2. 按姓名修改"endl;
cout"3. 退出修改"endl;
}
//查询学生的成绩,当然里面包括两个子函数
void modifyRecord()
{
int key;
coutendl;
Info_modify();
cout"请输入您的选择 : ";
cinkey;
//按学号修改
if(key == 1)
{
int targetNum;
cout"请输入您欲修改的学生的学号 : ";
cintargetNum;
modify_Num(targetNum);
coutendl;
//display();
}
//按姓名修改
if(key == 2)
{
char targetName[20];
cout"请输入您欲修改学生的姓名 : ";
cintargetName;
modify_Name(targetName);
coutendl;
//display();
}
//退出修改
if(key == 3)
{
while(1)
{
menu_CMD();
}
}
}
//按学号修改
void modify_Num(int tarNum)
{
int i;
for(i = 1;i = stuNum;i++)
{
if(record[i].num == tarNum)
{
coutendl"请修改该学生的信息"endl;
cout"请输入该学生的学号 : ";
cinrecord[i].num;
cout"请输入该学生的姓名 : ";
cinrecord[i].name;
cout"请输入该学生的性别 : ";
cinrecord[i].sex;
cout"请输入"subject[0]"的成绩 : ";
cinrecord[i].score[0];
cout"请输入"subject[1]"的成绩 : ";
cinrecord[i].score[1];
cout"请输入"subject[2]"的成绩 : ";
cinrecord[i].score[2];
}
}
}
//按姓名修改
void modify_Name(char tarName[])
{
int i;
for(i = 1;i = stuNum;i++)
{
if(strcmp(record[i].name,tarName) == 0)
{
coutendl"请修改该学生的信息 : "endl;
cout"请输入该学生的学号 : ";
cinrecord[i].num;
cout"请输入该学生的姓名 : ";
cinrecord[i].name;
cout"请输入该学生的性别 : ";
cinrecord[i].sex;
cout"请输入"subject[0]"的成绩 : ";
cinrecord[i].score[0];
cout"请输入"subject[1]"的成绩 : ";
cinrecord[i].score[1];
cout"请输入"subject[2]"的成绩 : ";
cinrecord[i].score[2];
}
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//显示queryRecord的表头信息
void Info_query()
{
cout"请输入查询方式 : "endl;
cout"1. 按学号查询"endl;
cout"2. 按姓名查询"endl;
cout"3. 退出查询"endl;
}
//查询学生信息queryRecord
void queryRecord()
{
int key;
coutendl;
Info_query();
cout"请输入您的选择 : ";
cinkey;
if(key == 1)
{
int targetNum;
cout"请输入您欲查询学生的学号 : ";
cintargetNum;
query_Num(targetNum);
coutendl;
}
if(key == 2)
{
char targetName[20];
cout"请输入您欲查询学生的学号 : ";
cintargetName;
query_Name(targetName);
coutendl;
}
//退出查询,退回到主菜单吧...
if(key == 3)
{
while(1)
{
menu_CMD();
}
}
}
//按学号查询
void query_Num(int tarNum)
{
int i;
for(i = 1;i = stuNum;i++)
{
if(record[i].num == tarNum)
{
//如果表中有该学生信息的话,仅用输出该学生的信息即可.
//输出该学生的信息
cout"该学生的信息如下 : "endl;
//显示表头信息
show_Table();
//显示该学生具体的信息
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
cout"\t"record[i].score[0]"\t"record[i].score[1]"\t"record[i].score[2];
coutendl;
}
}
}
//按姓名查询
void query_Name(char tarName[])
{
int i;
for(i = 1;i = stuNum;i++)
{
if(strcmp(record[i].name,tarName) == 0)
{
cout"该学生的信息如下 : "endl;
show_Table();
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
cout"\t"record[i].score[0]"\t"record[i].score[1]"\t"record[i].score[2];
coutendl;
}
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//先显示所有学生的信息吧
//显示record里所有学生的成绩
void display()
{
show_Table();
int i,j;
for(i = 1;i = stuNum;i++)
{
//cout"学号""\t""姓名""\t""性别";
coutrecord[i].num"\t"record[i].name"\t"record[i].sex;
for(j = 0;j SUBJECT_NUM;j++)
{
cout"\t"record[i].score[j];
}
coutendl;
}
coutendl;
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//退出
void quit()
{
char choi;
cout"您确定要退出吗?"endl;
cout"请输入您的选择(Y/N) : ";
cinchoi;
if((choi == 'Y')||(choi == 'y'))
{
cout"现在退出学生信息管理系统"endl;
exit(0);
}
//如果不是退出,则接着退回到主界面
else
{
coutendl;
menu_CMD();
}
}
这个是原创的... 在C-Free 4.0里跑过,可以正常运行
你可以试着跑一下,如果有什么问题可以和我联系
学生管理系统源代码c++
#include iostream.h
#include string.h
#include "h1.h"
void menu();
void clear()
{
cin.clear();
cin.ignore();
}
void stu::init_name_grade() //输入学生姓名、班级
{
cout"请输入学生姓名:";
cinname;
clear();
cout"请输入学生班级号:";
cingrade;
clear();
}
void stu::init_first() //输入学生第一学期成绩
{
cout"学生"name"第一学期成绩"endl;
cout"请输入英语成绩:";
cinfirst.english;
clear();
cout"请输入数学成绩:";
cinfirst.math;
clear();
first.total=first.english+first.math;
first.aver=first.total/2;
}
void stu::init_second() //输入学生第二学期成绩
{
cout"学生"name"第二学期成绩"endl;
cout"请输入英语成绩:";
cinsecond.english;
clear();
cout"请输入数学成绩:";
cinsecond.math;
clear();
second.total=second.english+second.math;
second.aver=second.total/2;
}
void stu::show_first() //显示学生第一学期成绩
{
cout"学生姓名:"nameendl;
cout"学生班级:"gradeendl;
cout"学生第一学期英语成绩:"first.englishendl;
cout"学生第一学期数学成绩:"first.mathendl;
cout"学生第一学期总成绩:"first.totalendl;
cout"学生第一学期平均成绩:"first.averendl;
}
void stu::show_second() //显示学生第二学期成绩
{
cout"学生姓名:"nameendl;
cout"学生班级:"gradeendl;
cout"学生第二学期英语成绩:"second.englishendl;
cout"学生第二学期数学成绩:"second.mathendl;
cout"学生第二学期总成绩:"second.totalendl;
cout"学生第二学期平均成绩:"second.averendl;
}
void stu::show_grade() //显示学生所有学期成绩
{
cout"学生姓名:"nameendl;
cout"学生班级:"gradeendl;
cout"学生第一学期英语成绩:"first.englishendl;
cout"学生第一学期数学成绩:"first.mathendl;
cout"学生第一学期总成绩:"first.totalendl;
cout"学生第一学期平均成绩:"first.averendl;
cout"学生第二学期英语成绩:"second.englishendl;
cout"学生第二学期数学成绩:"second.mathendl;
cout"学生第二学期总成绩:"second.totalendl;
cout"学生第二学期平均成绩:"second.averendl;
}
stu_info::stu_info() //stu_info的构造函数
{
num=0;
}
void stu_info::add_name_grade() //添加学生信息(班级、姓名)到数组中
{
int choose;
do
{
per[num].init_name_grade();
num++;
cout"继续输入学生信息吗?(0:退出,任意数字键继续...)";
cinchoose;
clear();
}while(choose!=0);
}
void stu_info::add_first(int gra) //添加第一学期成绩
{
for(int i=0;inum;i++)
{
if(per[i].grade==gra)
{
per[i].init_first();
}
}
}
void stu_info::add_second(int gra) //添加第二学期成绩
{
for(int i=0;inum;i++)
{
if(per[i].grade==gra)
{
per[i].init_second();
}
}
}
void stu_info::query_aver(int gra,int term) //按班级、学期及平均分排序显示学生成绩
{
stu temp[100];
stu t;
int sum=0;
for(int i=0;inum;i++)
{
if(per[i].grade==gra)
{
temp[sum]=per[i];
sum++;
}
}
for(int j=0;jsum-1;j++)
{
for(int k=sum-1;kj;k--)
{
if(term==1)
{
if(temp[k].first.avertemp[k-1].first.aver)
{
t=temp[k];
temp[k]=temp[k-1];
temp[k-1]=t;
}
}
else if(term==2)
{
if(temp[k].second.avertemp[k-1].second.aver)
{
t=temp[k];
temp[k]=temp[k-1];
temp[k-1]=t;
}
}
else
{
cout"该学期不存在!"endl;
return;
}
}
}
for( i=0;isum;i++)
{
if(term==1)
{
temp[i].show_first();
}
else
{
temp[i].show_second();
}
}
}
void stu_info::modify(int gra,char name[10]) //按班级、姓名查询学生信息并修改学生信息
{
for(int i=0;inum;i++)
{
if(per[i].grade==grastrcmp(per[i].name,name)==0)
{
per[i].init_name_grade();
per[i].init_first();
per[i].init_second();
return;
}
else
{
cout"该学生不存在!"endl;
}
}
}
void stu_info::query(int gra,char name[10]) //按班级、姓名查询学生信息并输出
{
for(int i=0;inum;i++)
{
if(per[i].grade==grastrcmp(per[i].name,name)==0)
{
per[i].show_grade();
return;
}
else
{
cout"该学生不存在!"endl;
}
}
}
void stu_info::query_grade(int gra) //按班级输出该班全部学生成绩
{
coutgra"班级学生的成绩如下:"endl;
for(int i=0;inum;i++)
{
if(per[i].grade==gra)
{
per[i].show_grade();
}
}
}
void stu_info::show_fail(int grade,int term,int course)
{
cout"不及格名单如下:"endl;
for(int i=0;inum;i++)
{
if(per[i].grade==grade)
{
if(term==1)
{
if(course==1)
{
if(per[i].first.english60)
{
coutper[i].nameendl;
}
}else if(course==2)
{
if(per[i].first.math60)
{
coutper[i].nameendl;
}
}
}
else if(term==2)
{
if(course==1)
{
if(per[i].second.english60)
{
coutper[i].nameendl;
}
}else if(course==2)
{
if(per[i].second.math60)
{
coutper[i].nameendl;
}
}
}
else
{
cout"该学期不存在!"endl;
return;
}
}
}
}
void main()
{
stu_info people;
int grade;
int term;
int choose;
int course;
char name[10];
while(1)
{
menu();
cinchoose;
clear();
switch(choose)
{
case 1:
people.add_name_grade();break;
case 2:
cout"请输入班级号:";
cingrade;
clear();
cout"请输入学期:";
cinterm;
clear();
if(term==1)
people.add_first(grade);
else
people.add_second(grade);
break;
case 3:
cout"请输入班级号:";
cingrade;
clear();
cout"请输入学生姓名:";
cinname;
clear();
people.modify(grade,name);
break;
case 4:
cout"请输入班级号:";
cingrade;
clear();
cout"请输入学期:";
cinterm;
clear();
people.query_aver(grade,term);
break;
case 5:
cout"请输入班级号:";
cingrade;
clear();
people.query_grade(grade);
break;
case 6:
cout"请输入班级号:";
cingrade;
clear();
cout"请输入学期:";
cinterm;
clear();
cout"请输入课程号(1:english,2:math):";
cincourse;
people.show_fail(grade,term,course);
break;
case 7:
cout"请输入班级号:";
cingrade;
clear();
cout"请输入学生姓名:";
cinname;
clear();
people.query(grade,name);
break;
case 8:return;
default:cout"选择错误,请重新选择!"endl;
}
}
}
void menu()
{
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" 8、退出系统"endl;
}
这上面是实现功能,下面是类的定义和声明 希望对你有用
struct term
{
int english;
int math;
int aver;
int total;
};
class stu
{
char name[10];
int grade;
struct term first;
struct term second;
public:
friend class stu_info;
void init_name_grade();
void init_first();
void init_second();
void show_grade();
void show_first();
void show_second();
};
class stu_info
{
stu per[100];
int num;
public:
stu_info();
void add_name_grade();
void add_first(int gra);
void add_second(int gra);
void query_aver(int gra,int term);
void modify(int gra,char name[10]);
void query(int gra,char name[10]);
void query_grade(int gra);
void show_fail(int grade,int term,int course);
};
c++学生信息管理系统源代码怎么写
#include iostream
#include iomanip
#include string
using namespace std;
typedef struct student {
unsigned m_id;
string m_name;
unsigned m_age;
string m_sex;
string m_address;
string m_contact;
string m_dormitory;
struct student *m_next;
}student;
class CStudent {
private :
student *head;
public :
CStudent() {
head = new student;
head-m_id = 0;
head-m_name = "noname";
head-m_next = NULL;
}
~CStudent() {
student *p = head,*q;
while(p) {
q = p;
p = q-m_next;
delete q;
}
}
student readdata(int model); // model = 1:不读取学号,2:不读取姓名,其他,读取所有信息
void entering();
bool insert(const student astu);
student *findid(unsigned id) const;
student *findname(const string name) const;
student *findsex(const string sex) const;
student *finddormitory(const string dormitory) const;
unsigned boys() const;
unsigned girls() const;
unsigned headcount() const;
bool eraseid();
bool erasename();
bool modifyid();
bool modifyname();
void Show() const;
void query() const;
void friend statistics(const CStudent aclss);
void friend erase(CStudent aclss);
void friend modify(CStudent aclss);
};
string readstring() {
string str;
while(cin.get() != '\n');
cin str;
return str;
}
student CStudent::readdata(int model) {
student tmp;
if(model != 1) { cout "学 号: "; cin tmp.m_id; }
if(model != 2) { cout "姓 名: "; tmp.m_name = readstring(); }
cin tmp.m_age;
cout "性 别: ";
tmp.m_sex = readstring();
cout "住 址: ";
tmp.m_address = readstring();
cout "联系方式: ";
tmp.m_contact =readstring();
cout "寝 室: ";
tmp.m_dormitory = readstring();
return tmp;
}
void CStudent::entering() {
student tmp;
cout "学号(0 to return): ";
cin tmp.m_id;
while(tmp.m_id) {
if(findid(tmp.m_id) == NULL) {
cout "姓 名: ";
tmp.m_name = readstring();
cout "年 龄: ";
cin tmp.m_age;
cout "性 别: ";
tmp.m_sex = readstring();
cout "住 址: ";
tmp.m_address = readstring();
cout "联系方式: ";
tmp.m_contact = readstring();
cout "寝 室: ";
tmp.m_dormitory = readstring();
insert(tmp);
}
else cout "重复的学号:" tmp.m_id endl;
cout "学号(0 to return): ";
cin tmp.m_id;
}
}
student *CStudent::findid(unsigned id) const {
student *p;
for(p = head; p-m_next; p = p-m_next)
if(p-m_next-m_id == id) return p;
return NULL;
}
student *CStudent::findname(const string name) const {
student *p;
for(p = head; p-m_next; p = p-m_next)
if(p-m_next-m_name == name) return p;
return NULL;
}
student *CStudent::findsex(const string sex) const {
student *p;
for(p = head; p-m_next; p = p-m_next)
if(p-m_next-m_sex == sex) return p;
return NULL;
}
student *CStudent::finddormitory(const string dormitory) const {
student *p;
for(p = head; p-m_next; p = p-m_next)
if(p-m_next-m_dormitory == dormitory) return p;
return NULL;
}
bool CStudent::insert(const student astu) {
student *newnode,*p = head;
if(p-m_next == NULL) {
p-m_next = new student(astu);
p-m_next-m_next = NULL;
return true;
}
while(p-m_next) {
if(p-m_next-m_id == astu.m_id) {
cout "重复的学号,插入失败!\n";
return false;
}
if(p-m_next-m_id astu.m_id) {
newnode = new student(astu);
newnode-m_next = p-m_next;
p-m_next = newnode;
return true;
}
p = p-m_next;
}
p-m_next = new student(astu);
p-m_next-m_next = NULL;
return true;
}
unsigned CStudent::boys() const {
unsigned cnt = 0;
student *p;
for(p = head-m_next; p; p = p-m_next)
if(p-m_sex == "男") ++cnt;
return cnt;
}
unsigned CStudent::girls() const {
unsigned cnt = 0;
student *p;
for(p = head-m_next; p; p = p-m_next)
if(p-m_sex == "女") ++cnt;
return cnt;
}
unsigned CStudent::headcount() const {
unsigned cnt = 0;
student *p;
for(p = head-m_next; p; p = p-m_next,++cnt);
return cnt;
}
bool CStudent::eraseid() {
student *q,*p;
unsigned id;
cout "输入要删除的学号:";
cin id;
p = findid(id);
if(p == NULL) {
cout "没有找到学号是\"" id "\"的学生,删除失败!\n";
return false;
}
q = p-m_next;
p-m_next = q-m_next;
delete q;
return true;
}
bool CStudent::erasename() {
student *q,*p;
string name;
cout "输入要删除人的姓名:";
name = readstring();
p = findname(name);
if(p == NULL) {
cout "没有找到姓名是\"" name "\"的学生,删除失败!\n";
return false;
}
q = p-m_next;
p-m_next = q-m_next;
delete q;
return true;
}
bool CStudent::modifyid() {
student tmp,*p;
unsigned id;
cout "输入要修改的学号:";
cin id;
p = findid(id);
if(p == NULL) {
cout "没有找到学号是\"" id "\"的学生,修改失败!\n";
return false;
}
tmp = readdata(1);
tmp.m_id = id;
*p = tmp;
return true;
}
bool CStudent::modifyname() {
student *p,tmp;
string name;
cout "输入要修改人的姓名:";
name = readstring();
p = findname(name);
if(p == NULL) {
cout "没有找到姓名是\"" name "\"的学生,修改失败!\n";
return false;
}
tmp = readdata(2);
tmp.m_name = name;
*p = tmp;
return true;
}
int menu() {
int choice;
do {
system("cls");
cout "\t****************************\n";
cout "\t* 学生基本信息管理系统 *\n";
cout "\t*==========================*\n";
cout "\t* 1、录入学生信息 *\n";
cout "\t* 2、显示学生信息 *\n";
cout "\t* 3、查询学生信息 *\n";
cout "\t* 4、添加学生信息 *\n";
cout "\t* 5、统计学生信息 *\n";
cout "\t* 6、删除学生信息 *\n";
cout "\t* 7、修改学生信息 *\n";
cout "\t* 0、退出管理系统 *\n";
cout "\t****************************\n";
cout "\n\t请选择:";
cin choice;
}while(choice 0 || choice 7);
return choice;
}
void show(student *p) {
cout p-m_id " " p-m_name " " p-m_age " ";
cout p-m_sex " " p-m_address " ";
cout p-m_contact " " p-m_dormitory endl;
}
void CStudent::Show() const {
student *p;
cout "----------------------------------------------------------\n";
for(p = head-m_next; p; p = p-m_next) show(p);
cout "----------------------------------------------------------\n";
system("pause");
}
void CStudent::query() const {
int select;
unsigned id;
string name;
student *p;
cout "1、按学号查询\n2、按姓名查询\n0、返回\n";
cin select;
switch(select) {
case 1 : cout "请输入学号:"; cin id;
if(p = findid(id)) show(p-m_next);
break;
case 2 : cout "请输入姓名:"; name = readstring();
if(p = findname(name)) show(p-m_next);
break;
case 0 : return;
default : cout "选择错误。\n";
}
system("pause");
}
void statistics(const CStudent a) {
unsigned total = a.headcount();
unsigned boys = a.boys();
unsigned girls = a.girls();
cout "学生总数:" total "人。\n";
cout "其中,男生:" boys "名。";
cout "女生:" girls "名。\n";
system("pause");
}
void erase(CStudent a) {
int select;
unsigned id;
string name;
student *p,*q;
cout "1、按学号删除\n2、按姓名删除\n0、返回\n";
cin select;
switch(select) {
case 1 : cout "请输入学号:"; cin id;
if(p = a.findid(id)) {
q = p-m_next;
p-m_next = q-m_next;
delete q;
cout "成功删除 " id " 的信息。\n";
}
break;
case 2 : cout "请输入姓名:"; name = readstring();
if(p = a.findname(name)) {
q = p-m_next;
p-m_next = q-m_next;
delete q;
cout "成功删除 " name " 的信息。\n";
}
break;
case 0 : return;
default : cout "选择错误。\n";
}
system("pause");
}
void modify(CStudent a) {
int select;
cout "1、按学号修改\n2、按姓名修改\n0、返回\n";
cin select;
switch(select) {
case 1 : if(a.modifyid()) cout "修改成功。\n"; break;
case 2 : if(a.modifyname()) cout "修改成功。\n"; break;
case 0 : return;
default : cout "选择错误。\n";
}
system("pause");
}
int main() {
CStudent a;
int an;
do {
an = menu();
switch(an) {
case 1 : a.entering(); break;
case 2 : a.Show(); break;
case 3 : a.query(); break;
case 4 : a.entering(); break;
case 5 : statistics(a); break;
case 6 : erase(a); break;
case 7 : modify(a); break;
case 0 : break;
default : cout "选择错误。\n"; break;
}
}while(an);
return 0;
}
ut); if(!fout){cout"cannot open file.";} for(i=0;in;i++) { fouthead-age" "head-nameendl; head=head-next; } fout.c
{ break; } } switch(key) { case 1: addRecord(); break; case 2: deleteRecord(); break; case 3: modifyRecord();