×

学生管理系统源代码 管理系统

学生管理系统源代码(求一个C语言学生学籍管理系统源代码)

admin admin 发表于2022-09-06 13:30:24 浏览99 评论0

抢沙发发表评论

本文目录

求一个C语言学生学籍管理系统源代码


#include 《stdio.h》
#include 《string.h》
#include 《conio.h》
#include 《malloc.h》
#include 《stdlib.h》#define N 100
struct student
{char XUEHAO;
char XINGMING;
char XINGBIE;
char SHENGRI;
char JIGUAN;
char ZHUANYE;
char BANJI;
char XUEYUAN;
}student;void CAIDAN();
void ZHUCE();
void XIUGAI();
void SHANCHU();
void del_XUEHAO(FILE *fp);
void del_XINGMING(FILE *fp);
void CHAZHAO();
void sch_XUEHAO(FILE *fp);
void sch_XINGMING(FILE *fp);
void TONGJI();
void XIANSHI();
void TIANJIA();
void save( struct student student);main()
{ char choose,yes_no;
do
{ CAIDAN();
printf(“\n 请输入序号: (1~8) “);
choose=getch();
system(“cls“);
switch(choose)
{
case’1’: printf(“ %c“,choose);ZHUCE();break;
case’2’: printf(“ %c“,choose);XIUGAI();break;
case’3’: printf(“ %c“,choose);SHANCHU();break;
case’4’: printf(“ %c“,choose);TIANJIA();break;
case’5’: printf(“ %c“,choose);CHAZHAO();break;
case’6’: printf(“ %c“,choose);TONGJI();break;
case’7’: printf(“ %c“,choose);XIANSHI();break;
case’8’: break;
default:printf(“\n %c 序号不对!\n“,choose);
}
if(choose==’8’)break;
printf(“\n 要继续选择吗 ? (Y/N) \n“);
do
{ yes_no=getch(); printf(“ %c“,yes_no);}
while(yes_no!=’Y’&&yes_no!=’y’&&yes_no!=’N’&&yes_no!=’n’);
}while(yes_no==’Y’||yes_no==’y’);
}
void CAIDAN()
{
system(“cls“);
printf(“ **************************************** \n “);
printf(“ * ——请选择相应的功能—— * \n “);
printf(“ * 1-----注册 * \n “);
printf(“ * 2-----修改学生信息 * \n “);
printf(“ * 3-----删除学生信息 * \n “);
printf(“ * 4-----添加学生信息 * \n “);
printf(“ * 5-----查找学生信息 * \n “);
printf(“ * 6-----统计学生信息 * \n “);
printf(“ * 7-----显示学生信息 * \n “);
printf(“ * 8-----退出系统 * \n “);
printf(“ **************************************** \n “);
}/*定义学生信息注册的函数*/
void ZHUCE()
{ int i=1;
struct student temp;
FILE *fp;
fp=fopen(“G://123.txt“,“w“);
if(fp==NULL){ printf(“\n 打开文件失败! \n“);return; }
printf(“\n 请输入第1个学生信息:\n“);
printf(“ 学号(用#结束输入): “);
do
{ gets(temp.XUEHAO);}
while(strcmp(temp.XUEHAO,“ “)==0);
printf(“ 姓名(用#结束输入): “);gets(temp.XINGMING);
printf(“ 性别(用#结束输入): “);gets(temp.XINGBIE);
printf(“ 生日(用#结束输入): “);gets(temp.SHENGRI);
printf(“ 籍贯(用#结束输入): “);gets(temp.JIGUAN);
printf(“ 专业(用#结束输入): “);gets(temp.ZHUANYE);
printf(“ 班级(用#结束输入): “);gets(temp.BANJI);
printf(“ 学院(用#结束输入): “);gets(temp.XUEYUAN);
while(temp.XUEHAO!=’#’&&temp.XINGMING!=’#’&&temp.XINGBIE!=’#’&&temp.SHENGRI!=’#’&&temp.JIGUAN!=’#’&&temp.ZHUANYE!=’#’&&temp.BANJI!=’#’&&temp.XUEYUAN!=’#’)
{ fprintf(fp,“%5s%10s%10s%10s%10s%10s%10s%10s\n“,temp.XUEHAO,temp.XINGMING,temp.XINGBIE,temp.SHENGRI,temp.JIGUAN,temp.ZHUANYE,temp.BANJI,temp.XUEYUAN,temp);
i++;
printf(“\n 请输入第 %d 个学生信息:\n “,i);
printf(“ 学号(用#结束输入): “);
do
{ gets(temp.XUEHAO);}
while(strcmp(temp.XUEHAO,“ “)==0);
printf(“ 姓名(用#结束输入): “);gets(temp.XINGMING);
printf(“ 性别(用#结束输入): “);gets(temp.XINGBIE);
printf(“ 生日(用#结束输入): “);gets(temp.SHENGRI);
printf(“ 籍贯(用#结束输入): “);gets(temp.JIGUAN);
printf(“ 专业(用#结束输入): “);gets(temp.ZHUANYE);
printf(“ 班级(用#结束输入): “);gets(temp.BANJI);
printf(“ 学院(用#结束输入): “);gets(temp.XUEYUAN);
}
student=temp;
save(&temp);
fclose(fp);
}/*定义保存函数*/
void save( struct student student)
{
FILE *fp=NULL;
fp=fopen(“G://123.txt“,“ab+“);
fwrite(student,sizeof(struct student),1,fp);
fclose(fp);
}
/*定义查找学生信息的函数*/
void CHAZHAO()
{ char c;
FILE *fp;
fp=fopen(“G://123.txt“,“r“);
if(fp==NULL)
{ printf(“\n 打开文件失败! \n“);return; }
printf(“\n 按学号查找( 1 ),还是按姓名查找( 2 )? “);
c=getch();
putch(c);
if(c==’1’) sch_XUEHAO(fp);
else if(c==’2’) sch_XINGMING(fp);
else printf(“\n 非法字符!\n“);
fclose(fp);
}
/*定义按学号查找学生信息的函数*/
void sch_XUEHAO(FILE *fp)
{ int flag=0,n=0;
char tempXUEHAO;
struct student temp;
printf(“\n 请输入要查找学生信息的学号: “);
gets(tempXUEHAO);
while(feof(fp)==0)
{ fscanf(fp,“%5s%10s%10s%10s%10s%10s%10s%10s\n“,&temp.XUEHAO,&temp.XINGMING,&temp.XINGBIE,&temp.SHENGRI,&temp.JIGUAN,&temp.ZHUANYE,&temp.BANJI,&temp.XUEYUAN);
if(strcmp(tempXUEHAO,temp.XUEHAO)==0)
{ if(flag==0)
printf(“ 学号 姓名 性别 生日 籍贯 专业 班级 学院\n“);
printf(“%5s%10s%10s%10s%10s%10s%10s%10s\n“,temp.XUEHAO,temp.XINGMING,temp.XINGBIE,temp.SHENGRI,temp.JIGUAN,temp.ZHUANYE,temp.BANJI,temp.XUEYUAN);
flag=1;
}
n++;
}
if(n==0) printf(“\n 文件中无此信息!\n“);
else if(flag==0) printf(“\n 文件中无此人!\n“);
}
/*定义按姓名查找学生信息的函数*/
void sch_XINGMING(FILE *fp)
{ int flag=0,n=0;
char tempXINGMING;
struct student temp;
printf(“\n 请输入要查找学生信息的姓名: “);
gets(tempXINGMING);
while(feof(fp)==0)
{ fscanf(fp, “%5s%10s%10s%10s%10s%10s%10s%10s\n“,&temp.XUEHAO,&temp.XINGMING,&temp.XINGBIE,&temp.SHENGRI,&temp.JIGUAN,&temp.ZHUANYE,&temp.BANJI,&temp.XUEYUAN);
if(strcmp(tempXINGMING,temp.XINGMING)==0)
{ if(flag==0) printf(“ 学号 姓名 性别 生日 籍贯 专业 班级 学院\n“);
printf(“%5s%10s%10s%10s%10s%10s%10s%10s\n“,temp.XUEHAO,temp.XINGMING,temp.XINGBIE,temp.SHENGRI,temp.JIGUAN,temp.ZHUANYE,temp.BANJI,temp.XUEYUAN);
flag=1;
}
n++;
}
if(n==0) printf(“\n 文件中无此信息!\n“);
else if(flag==0) printf(“\n 文件中无此人!\n“);
}
/*定义删除学生信息的函数*/
void SHANCHU()
{ char c;
FILE *fp;
fp=fopen(“G://123.txt“,“r“);
if(fp==NULL)
{ printf(“\n 文件打开失败!\n “);return; }
printf(“\n 按学号删除( 1 ),还是按姓名删除( 2 )? “);
c=getch();
putch(c);
if(c==’1’) del_XUEHAO(fp);
else if(c==’2’) del_XINGMING(fp);
else printf(“\n 非法字符!\n“);

}/*定义按学号删除学生信息的函数*/
void del_XUEHAO(FILE *fp)
{ char tempXUEHAO;
int n=0,i=0,k;
struct student stu[N];
while(feof(fp)==0)
{ fscanf(fp,“%5s%10s%10s%10s%10s%10s%10s%10s\n“,stu[i].XUEHAO,stu[i]. XINGMING,stu[i].XINGBIE,stu[i].SHENGRI,stu[i].JIGUAN,stu[i].ZHUANYE,stu[i].BANJI,stu[i].XUEYUAN);i++;n++;}
fclose(fp);
printf(“\n 请输入要删除的学生信息的学号:“);
scanf(“%s“,tempXUEHAO);
printf(“ 删除成功! “);
for(i=0;i《n;i++)
if(strcmp(tempXUEHAO,stu[i].XUEHAO)==0)break;
if(i《n)
for(k=i;k《n;k++)
stu[k]=stu[k+1];
else printf(“\n 无此人!\n“);
fp=fopen(“G://123.txt“,“w“);
if(fp==NULL)
{ printf(“\n 文件打开失败!\n“);return; }
for(i=0;i《n-1;i++)
fprintf(fp,“%5s%10s%10s%10s%10s%10s%10s%10s\n“,stu[i].XUEHAO,stu[i].XINGMING,stu[i].XINGBIE,stu[i].SHENGRI,stu[i].JIGUAN,stu[i].ZHUANYE,stu[i].BANJI,stu[i].XUEYUAN);
}

学生信息管理系统最简单源代码


方法一:

1、创建一个c语言项目。然后右键头文件,创建一个Stu的头文件。

2、然后编写头文件的代码。再将数据结构的增删改查和结构体写入头文件。

3、然后在源文件中创建main源文件和Stu源文件。再main文件中写入intmian()代码。

4、然后在mian主函数中,写入while语句无限循环。再写入Init函数。

5、在Stu源文件的Init函数用printf语句,将学生管理系统输出。再创建链表的头节点head。

6、然后用switch函数对操作进行判断。再执行数据结构的增删改查功能。这样一个学生管理系统的基本框架就完成了。

方法二:

1、新建一个学生实体类,用于存放学生的各项信息。

2、新建一个链表节点类,每个节点存放一个学生信息及下一个节点的引用。

3、添加一个主操作类,并添加本系统的菜单方法。

4、定义链表的头节点,当前最后一个节点,以及主控制逻辑信息。

5、使用io流逐行读取存有学生信息的文本文件,对每行字符串,采用\t分割后得到一个字符串数组,数据各项即为一个学生的具体信息。然后新建一个节点加入到链表。

6、运行结果:


C++学生信息管理系统源代码


#include《iostream.h》
#include《iomanip.h》
class student
{public:
char name;
char sex;
char major;
}stu;
int main()
{int i;
void f1();
void f2();
void f3();
void f4();
cout《《setw(50);
cout《《“欢迎进入学生管理系统!“《《endl;
for(;i!=4;)
{
cout《《setw(55)《《“1 添加学生信息 2 查询学生信息\n“;
cout《《setw(55)《《“3 删除学生信息 4 退出管理系统\n“;
cout《《“请选则:“;
cin》》i;
switch(i){
case 1:f1();break;
case 2:f2();break;
case 3:f3();break;
case 4:f4();break;
default:cout《《“你的输入有误!\n“;
}}
return 0;
}
int w;
void f1()
{int i,n;
cout《《“请输入要添加的学生个数:\n“;
cin》》n;
if(n》=100||n《=0)
cout《《“输入有误!\n“;
else{
for(i=1;i《=n;i++)
{cout《《“请输入姓名、性别、专业:“;
cin》》stu[i].name》》stu[i].sex》》stu[i].major;
}
for(i=1;i《=n;i++)
cout《《i《《“ “《《stu[i].name《《“ “《《stu[i].sex《《“ “《《stu[i].major《《endl;
w=n;}}
void f2()
{int i;
cin》》i;
if(i》0&&i《=w)
cout《《i《《“ “《《stu[i].name《《“ “《《stu[i].sex《《“ “《《stu[i].major《《endl;
else cout《《“无此\n“;
}
void f3()
{int i,a;
cin》》a;
if(a》0&&a《=w)
{for(i=a;i《=w;i++)
stu[i]=stu[i+1];
cout《《“删除后的学生信息:“;
for(i=1;i《w;i++)
cout《《i《《“ “《《stu[i].name《《“ “《《stu[i].sex《《“ “《《stu[i].major《《endl;
}
else cout《《“输入有误!“;
}
void f4()
{}
第5步我才学到,还没学完,是用
int *fwrite(“文件名“,“操作方式“)
这个弄的吧....这里还没怎么弄懂
就先把前4步发上来..
-学生管理系统源代码

学生管理系统源代码c++


#include 《iostream.h》
#include 《string.h》
#include “h1.h“
void menu();
void clear()
{
cin.clear();
cin.ignore();
}
void stu::init_name_grade() //输入学生姓名、班级
{
cout《《“请输入学生姓名:“;
cin》》name;
clear();
cout《《“请输入学生班级号:“;
cin》》grade;
clear();
}
void stu::init_first() //输入学生第一学期成绩
{
cout《《“学生“《《name《《“第一学期成绩“《《endl;
cout《《“请输入英语成绩:“;
cin》》first.english;
clear();
cout《《“请输入数学成绩:“;
cin》》first.math;
clear();
first.total=first.english+first.math;
first.aver=first.total/2;
}
void stu::init_second() //输入学生第二学期成绩
{
cout《《“学生“《《name《《“第二学期成绩“《《endl;
cout《《“请输入英语成绩:“;
cin》》second.english;
clear();
cout《《“请输入数学成绩:“;
cin》》second.math;
clear();
second.total=second.english+second.math;
second.aver=second.total/2;
}
void stu::show_first() //显示学生第一学期成绩
{
cout《《“学生姓名:“《《name《《endl;
cout《《“学生班级:“《《grade《《endl;
cout《《“学生第一学期英语成绩:“《《first.english《《endl;
cout《《“学生第一学期数学成绩:“《《first.math《《endl;
cout《《“学生第一学期总成绩:“《《first.total《《endl;
cout《《“学生第一学期平均成绩:“《《first.aver《《endl;
}
void stu::show_second() //显示学生第二学期成绩
{
cout《《“学生姓名:“《《name《《endl;
cout《《“学生班级:“《《grade《《endl;
cout《《“学生第二学期英语成绩:“《《second.english《《endl;
cout《《“学生第二学期数学成绩:“《《second.math《《endl;
cout《《“学生第二学期总成绩:“《《second.total《《endl;
cout《《“学生第二学期平均成绩:“《《second.aver《《endl;
}
void stu::show_grade() //显示学生所有学期成绩
{
cout《《“学生姓名:“《《name《《endl;
cout《《“学生班级:“《《grade《《endl;
cout《《“学生第一学期英语成绩:“《《first.english《《endl;
cout《《“学生第一学期数学成绩:“《《first.math《《endl;
cout《《“学生第一学期总成绩:“《《first.total《《endl;
cout《《“学生第一学期平均成绩:“《《first.aver《《endl;
cout《《“学生第二学期英语成绩:“《《second.english《《endl;
cout《《“学生第二学期数学成绩:“《《second.math《《endl;
cout《《“学生第二学期总成绩:“《《second.total《《endl;
cout《《“学生第二学期平均成绩:“《《second.aver《《endl;
}
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:退出,任意数字键继续...)“;
cin》》choose;
clear();
}while(choose!=0);
}
void stu_info::add_first(int gra) //添加第一学期成绩
{
for(int i=0;i《num;i++)
{
if(per[i].grade==gra)
{
per[i].init_first();
}
}
}
void stu_info::add_second(int gra) //添加第二学期成绩
{
for(int i=0;i《num;i++)
{
if(per[i].grade==gra)
{
per[i].init_second();
}
}
}
void stu_info::query_aver(int gra,int term) //按班级、学期及平均分排序显示学生成绩
{
stu temp;
stu t;
int sum=0;
for(int i=0;i《num;i++)
{
if(per[i].grade==gra)
{
temp[sum]=per[i];
sum++;
}
}
for(int j=0;j《sum-1;j++)
{
for(int k=sum-1;k》j;k--)
{
if(term==1)
{
if(temp[k].first.aver》temp[k-1].first.aver)
{
t=temp[k];
temp[k]=temp[k-1];
temp[k-1]=t;
}
}
else if(term==2)
{
if(temp[k].second.aver》temp[k-1].second.aver)
{
t=temp[k];
temp[k]=temp[k-1];
temp[k-1]=t;
}
}
else
{
cout《《“该学期不存在!“《《endl;
return;
}
}
}
for( i=0;i《sum;i++)
{
if(term==1)
{
temp[i].show_first();
}
else
{
temp[i].show_second();
}
}
}
void stu_info::modify(int gra,char name) //按班级、姓名查询学生信息并修改学生信息
{
for(int i=0;i《num;i++)
{
if(per[i].grade==gra&&strcmp(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) //按班级、姓名查询学生信息并输出
{
for(int i=0;i《num;i++)
{
if(per[i].grade==gra&&strcmp(per[i].name,name)==0)
{
per[i].show_grade();
return;
}
else
{
cout《《“该学生不存在!“《《endl;
}
}
}
void stu_info::query_grade(int gra) //按班级输出该班全部学生成绩
{
cout《《gra《《“班级学生的成绩如下:“《《endl;
for(int i=0;i《num;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;i《num;i++)
{
if(per[i].grade==grade)
{
if(term==1)
{
if(course==1)
{
if(per[i].first.english《60)
{
cout《《per[i].name《《endl;
}
}else if(course==2)
{
if(per[i].first.math《60)
{
cout《《per[i].name《《endl;
}
}
}
else if(term==2)
{
if(course==1)
{
if(per[i].second.english《60)
{
cout《《per[i].name《《endl;
}
}else if(course==2)
{
if(per[i].second.math《60)
{
cout《《per[i].name《《endl;
}
}
}
else
{
cout《《“该学期不存在!“《《endl;
return;
}
}
}
}
void main()
{
stu_info people;
int grade;
int term;
int choose;
int course;
char name;
while(1)
{
menu();
cin》》choose;
clear();
switch(choose)
{
case 1:
people.add_name_grade();break;
case 2:
cout《《“请输入班级号:“;
cin》》grade;
clear();
cout《《“请输入学期:“;
cin》》term;
clear();
if(term==1)
people.add_first(grade);
else
people.add_second(grade);
break;
case 3:
cout《《“请输入班级号:“;
cin》》grade;
clear();
cout《《“请输入学生姓名:“;
cin》》name;
clear();
people.modify(grade,name);
break;
case 4:
cout《《“请输入班级号:“;
cin》》grade;
clear();
cout《《“请输入学期:“;
cin》》term;
clear();
people.query_aver(grade,term);
break;
case 5:
cout《《“请输入班级号:“;
cin》》grade;
clear();
people.query_grade(grade);
break;
case 6:
cout《《“请输入班级号:“;
cin》》grade;
clear();
cout《《“请输入学期:“;
cin》》term;
clear();
cout《《“请输入课程号(1:english,2:math):“;
cin》》course;
people.show_fail(grade,term,course);
break;
case 7:
cout《《“请输入班级号:“;
cin》》grade;
clear();
cout《《“请输入学生姓名:“;
cin》》name;
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;
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;
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);
void query(int gra,char name);
void query_grade(int gra);
void show_fail(int grade,int term,int course);
};
-管理系统

c语言程序学生成绩管理系统源代码


头文件:::
#ifndef H_STUDENT_HH
#define H_STUDENT_HH
#include “stdio.h“
#include “string.h“
#include “malloc.h“
#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/
#define numsubs 5 /*学科数目*/
typedef struct message_student /*结构体定义*/
{
char number;
char name;
char sex;
float subject[numsubs];
float score;
float average;
int index;
}student;
extern int numstus; /*学生数目*/
extern student *pointer; /*指向结构体数组*/
extern int lens;
int menu_select(); /*函数声明*/
int openfile(student stu);
int findrecord(student stud);
int writetotext(student stud);
void welcome();
void display1();
void showtable();
void sort(student stu);
void deleterecord(student stu,int i);
void addrecord(student stud);
void display(student stud,int n1,int n2);
void amendrecord(student stud);
void count(student stud);
void sortnum(student stud);
void sortnum2(student stud);
void sortname(student stud);
void sortname2(student stud);
void sortcount(student stud);
void sortcount2(student stud);
void statistic(student stud);
void display1();
#endif
#include “head.h“
int menu_select()
{
char c;
printf(“\n\n“);
printf(“ | 1. 增加学生记录 5.统计信息 |\n“);
printf(“ | 2. 查询学生记录 6.打开文件 |\n“);
printf(“ | 3. 修改学生记录 7.保存文件 |\n“);
printf(“ | 4. 学生纪录排序 8.显示记录 |\n“);
printf(“ | 0.退出系统 |\n“);
printf(“\n\n“);
printf(“请选择(0-8):“);
c=getchar();
getchar();
return (c-’0’);
}
#include “head.h“
int findrecord(student stud) /*查找信息*/
{
char str;
int i,num;
if(numstus==0)
{
printf(“没有可被查找的记录\n“);
return -1;
}
else
{
printf(“以何种方式查找?\n1.学号\t2.姓名\t3.名次\n“);
gets(str);
if(str==’1’) /*按学号查找*/
{
printf(“请输入学号:“);
gets(str);
for(i=0;i《=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str==’2’) /*按姓名查找*/
{
printf(“请输入姓名:“);
gets(str);
for(i=0;i《=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str==’3’) /*按名次查找*/
{
printf(“请输入名次:“);
scanf(“%d“,#);
getchar();
for(i=0;i《=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
else continue;
}
if(i》numstus)
{
printf(“没有查找所要的信息。\n“);
return -1;
}
return i;
}
}
#include“head.h“
int openfile(student stu)
{
int i=0,j;
FILE *fp;
char filename,str;
if(numstus!=0)
{
printf(“已经有记录存在,是否保存?(y/n)“);
gets(str);
if(str==’y’||str==’Y’)
writetotext(stu);
}
printf(“请输入文件名:“);
gets(filename);
numstus=0;
if((fp=fopen(filename,“rb+“))==NULL)
{
printf(“无法打开该文件\n“);
return(-1);
}
fscanf(fp,“%d“,&numstus);
fgetc(fp);
while(i《numstus)
{
fscanf(fp,“%s“,stu[i].number);
fscanf(fp,“%s“,stu[i].name);
fscanf(fp,“%s“,stu[i].sex);
for(j=0;j《numsubs;j++)
fscanf(fp,“%f“,&stu[i].subject[j]);
fscanf(fp,“%f“,&stu[i].score);
fscanf(fp,“%f“,&stu[i].average);
fscanf(fp,“%d“,&stu[i].index);
i++;
}
fclose(fp);
printf(“文件读取成功\n“);
printf(“是否显示纪录?(y/n)“);
gets(str);
if(str==’y’||str==’Y’)
display(stu,0,numstus-1);
return(0);
}
#include “head.h“
void sort(student stud)
{
int i,j=0;
char str;
student *p;
p=stud;
if(numstus==0)
{
printf(“没有可供查询的记录!“);
}
while(1)
{
for(i=0;;i++)
{
printf(“ 请输入查询方式:“);
printf(“(直接输入回车则结束查询操作)\n“);
printf(“1.按照学号\t“);
printf(“2.按照姓名\t“);
printf(“3.按照名次\n“);
gets(str);
if(strlen(str)==0) break;
if(str==’1’)
{
printf(“请输入排序次序:\n“);
printf(“1.升序排列\t“);
printf(“2.降序排列\n“);
gets(str);
if(str==’1’)
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
else if(str==’2’)
{
printf(“请输入排序次序:\n“);
printf(“1.升序排列\t“);
printf(“2.降序排列\n“);
gets(str);
if(str==’1’)
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
else if(str==’3’)
{
printf(“请输入排序次序:\n“);
printf(“1.升序排列\t“);
printf(“2.降序排列\n“);
gets(str);
if(str==’1’)
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
else printf(“请输入1~3“);
printf(“是否退出排序?(y/n)“);
gets(str);
if(str==’y’||str==’Y’) break;
}
return;
}
}
void sortnum(student stud)
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i《numstus;i++)
for(j=0;j《numstus-i-1;j++)
{
if(strcmp(stud[j+1].number,stud[j].number)》0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortnum2(student stud)
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i《numstus;i++)
for(j=0;j《numstus-i-1;j++)
{
if(strcmp(stud[j].number,stud[j+1].number)》0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname(student stud)
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i《numstus;i++)
for(j=0;j《numstus-i-1;j++)
{
if(strcmp(stud[j+1].name,stud[j].name)》0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname2(student stud)
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i《numstus;i++)
for(j=0;j《numstus-i-1;j++)
{
if(strcmp(stud[j].name,stud[j+1].name)》0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount(student stud)
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i《numstus;i++)
for(j=0;j《numstus-i-1;j++)
{
if(stud[j+1].index》stud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount2(student stud)
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i《numstus;i++)
for(j=0;j《numstus-i-1;j++)
{
if(stud[j].index》stud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
#include“head.h“
void statistic(student stud) /*新增功能,输出统计信息*/
{
int i,j=0,k=0;
char c1,str;
float average[numsubs],sum=0;
if(numstus==0)
printf(“没有可被查找的记录\n“);
else
{
while(1)
{
printf(“下面将统计考试成绩\n“);
printf(“请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n“);
c1=getchar();
printf(“\t一共有个%d记录\n“,numstus); /*总共记录数*/
switch(c1)
{
case ’1’:
for(i=0;i《numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject;
if(stud[k].subject》stud[i].subject) k=i;
if(stud[j].subject《stud[i].subject) j=i;
}
average=sum/numstus;
printf(“\t科目A的最高分:\n“); /*最高分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[j].number,stud[j].name,stud[j].subject);
printf(“\t科目A的最低分是:\n“); /*最低分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[k].number,stud[k].name,stud[k].subject);
printf(“\t科目A的平均分是 %5.2f\n“,average); /*平均分*/
break;
case ’2’:
for(i=0;i《numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject;
if(stud[k].subject》stud[i].subject) k=i;
if(stud[j].subject《stud[i].subject) j=i;
}
average=sum/numstus;
printf(“\t科目B的最高分:\n“); /*最高分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[j].number,stud[j].name,stud[j].subject);
printf(“\t科目B的最低分是:\n“); /*最低分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[k].number,stud[k].name,stud[k].subject);
printf(“\t科目B的平均分是 %5.2f\n“,average); /*平均分*/
break;
case ’3’:
for(i=0;i《numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject;
if(stud[k].subject》stud[i].subject) k=i;
if(stud[j].subject《stud[i].subject) j=i;
}
average=sum/numstus;
printf(“\t科目C的最高分:\n“); /*最高分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[j].number,stud[j].name,stud[j].subject);
printf(“\t科目C的最低分是:\n“); /*最低分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[k].number,stud[k].name,stud[k].subject);
printf(“\t科目C的平均分是 %5.2f\n“,average); /*平均分*/
break;
case ’4’:
for(i=0;i《numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject;
if(stud[k].subject》stud[i].subject) k=i;
if(stud[j].subject《stud[i].subject) j=i;
}
average=sum/numstus;
printf(“\t科目D的最高分:\n“); /*最高分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[j].number,stud[j].name,stud[j].subject);
printf(“\t科目D的最低分是:\n“); /*最低分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[k].number,stud[k].name,stud[k].subject);
printf(“\t科目D的平均分是 %5.2f\n“,average); /*平均分*/
break;
case ’5’:
for(i=0;i《numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject;
if(stud[k].subject》stud[i].subject) k=i;
if(stud[j].subject《stud[i].subject) j=i;
}
average=sum/numstus;
printf(“\t科目E的最高分:\n“); /*最高分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[j].number,stud[j].name,stud[j].subject);
printf(“\t科目E的最低分是:\n“); /*最低分*/
printf(“\t\t学号:%s 姓名:%s 分数:%.2f\n“,stud[k].number,stud[k].name,stud[k].subject);
printf(“\t科目E的平均分是 %5.2f\n“,average); /*平均分*/
break;
default:printf(“输入错误!请输入1~5之间的数\n“);
}
sum=0;
getchar();
printf(“是否继续进行统计?(y/n)“);
gets(str);
if(str==’y’||str==’Y’) ;
else break;
}
}
}
#include“head.h“
int writetotext(student stud) /*将所有记录写入文件*/
{
int i=0,j;
FILE *fp;
char filename;
printf(“输入文件名称:“);
gets(filename);
fp=fopen(filename,“w“);
fprintf(fp,“%d\n“,numstus);
while(i《numstus)
{
fprintf(fp,“%s %s %s “,stud[i].number,stud[i].name,stud[i].sex);
for(j=0;j《numsubs;j++)
fprintf(fp,“%f “,stud[i].subject[j]);
fprintf(fp,“%f %f %d “,stud[i].score,stud[i].average,stud[i].index);
i++;
}
fclose(fp);
printf(“已成功存储!\n“);
display(stud,0,numstus-1);
numstus=0;
return 0;
}
#include“head.h“
void welcome()
{
printf(“\t*************************************************************\n“);
printf(“\t\t\t\t这是一个学生成绩管理系统\n\t\t\t\t 倾情奉献 欢迎使用!\n“);
printf(“\t*************************************************************\n“);
}
void showtable()
{
printf(“---------------------------------------------------------------------------------------\n“);
printf(“学号\t姓名\t性别\tA\tB\tC\tD\tE\t总分\t平均分\t名次\n“);
printf(“---------------------------------------------------------------------------------------\n“);
}
void display(student stud,int n1,int n2)
{
int i;
showtable(); /*显示表头*/
for(i=n1;i《=n2;i++)
printf(“%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n“,stud[i].number,stud[i].name,stud[i].sex,stud[i].subject,stud[i].subject,stud[i].subject,stud[i].subject,stud[i].subject,stud[i].score,stud[i].average,stud[i].index);
/*通过循环输出数据*/

}
void display1()
{
printf(“\t\t本系统由计应精英一组亲情制作\n\n“);
printf(“\t\t制作人员列表: (按比划)\n“);
printf(“\t\t王庆斌\t\t\t张威\n\t\t李智\t\t\t周在峰\n\t\t杨凯\t\t\t胡杨\n“);
printf(“\n\n“);
getchar();
}
#include“head.h“
#include《string.h》
void amendrecord(student stud)
{
char str; /*供用户输入*/
int i=-1,j;

if(numstus==0) /*没有记录返回*/
printf(“没有可供修改的记录!“);
while(i《0)
{
i=findrecord(stud);
if(i》=0)
{
printf(“要删除这个学生的信息吗?(y/n)“);
gets(str);
if(str==’y’||str==’Y’)
{
deleterecord(stud,i);
count(stud);
}
else
{
printf(“确定要修改这个学生的信息吗?(y/n)“);
gets(str);
if(str==’y’||str==’Y’)
{

printf(“下面请重新输入学生的信息:\n“);
printf(“请输入学号:“);
gets(stud[i].number);
printf(“请输入姓名:“);
gets(stud[i].name);
printf(“请输入性别(男/女 1/0):“);
gets(str);
if(str==’0’)
strcpy(stud[i].sex,“女“);
else
strcpy(stud[i].sex,“男“);
stud[i].score=0;
printf(“请按顺序输入成绩:“);
for(j=0;j《numsubs;j++)
{
scanf(“%f“,&stud[i].subject[j]);
stud[i].score+=stud[i].subject[j];
}
getchar();
stud[i].average=stud[i].score/numsubs;
}
count(stud);
}
display(stud,0,numstus-1);
}
printf(“是否继续进行其他修改?(y/n)\n“);
gets(str);
if(str==’y’||str==’Y’)
i=-1;
else i=1;
}
}
void deleterecord(student stu,int i) /*删除信息*/
{
int j;
while(i》=0)
{
for(j=i;j《numstus;j++)
stu[j]=stu[j+1];
numstus--;
printf(“删除成功!\n“);
}
}
void count(student stud)
{
int i,j;
for(i=0;i《numstus;i++)
{
stud[i].index=1;
for(j=0;j《numstus;j++)
if(stud[j].score》stud[i].score)
stud[i].index++;
}
}
#include “head.h“
void addrecord(student stud)
{
int i=0,j,num;
char str;
if(numstus!=0)
{
printf(“已有记录存在是否覆盖?(y/n)\n“);
gets(str);
if(str==’Y’||str==’y’)
i=0;
else i=numstus;
}

printf(“请输入增加的学生信息条目数:“);
scanf(“%d“,#);
if(i==0)
numstus=num;
else numstus+=num;
if(numstus》lens)
{
lens+=50;
pointer=(student *)realloc(pointer,lens*LEN);
}
printf(“请输入学生信息:\n“);
for(;i《numstus;i++)
{
getchar();
printf(“请输入学号:“);
gets(pointer[i].number);
printf(“请输入姓名:“);
gets(pointer[i].name);
printf(“请输入性别(男/女 1/0):“);
gets(pointer[i].sex);
if(pointer[i].sex==’0’) strcpy(pointer[i].sex,“女“);
else strcpy(pointer[i].sex,“男“);
printf(“请输入各科成绩:(按ABCDE的顺序):“);
stud[i].score=0;
for(j=0;j《numsubs;j++)
{
scanf(“%f“,&stud[i].subject[j]); /*计算总分*/
stud[i].score+=stud[i].subject[j];
}
stud[i].average=stud[i].score/numsubs; /*计算平均分*/
}
count(stud); /*附名次*/
display(stud,0,numstus-1);
getchar();
}#include “head.h“
int numstus;
int lens;
student *pointer;
void main()
{
int i=1;
char str;
lens=100;
pointer=(student *)malloc(lens*LEN); /*分配内存*/
numstus=0;
welcome(); /*欢迎界面*/
while(i》0)
{
i=menu_select(); /*控制菜单*/
switch(i)
{
case 1:addrecord(pointer);break; /*增加学生信息*/
case 2:findrecord(pointer);break; /*查询学生信息*/
case 3:amendrecord(pointer);break; /*修改学生信息*/
case 4:sort(pointer);break; /*学生信息排序*/
case 5:statistic(pointer);break; /*统计信息*/
case 6:openfile(pointer);break; /*打开文件*/
case 7:writetotext(pointer);break; /*保存文件*/
case 8:display(pointer,0,numstus-1);break; /*显示记录*/
case 0:
if(numstus!=0) printf(“是否保存当前记录?(y/n)“);
gets(str);
if(str==’y’||str==’Y’)
writetotext(pointer);
i=-1;break; /*退出系统*/
default:printf(“请输入数字0~8:\n“);i=1; /*输入错误*/
}
}
printf(“\t\t欢迎再次使用本系统。\n\n“);
display1();
}
自己一改就能用,给我加分哈!
-学生管理系统源代码

学生信息管理系统C++源代码


#include《iostream》
#include《stdlib.h》
#include《string.h》
#include《malloc.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;
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.num = 1001;
strcpy(record.name,“Jason“);
record.sex = ’M’;
record.score = 85.0;
record.score = 90.0;
record.score = 95.0;
record.num = 1002;
strcpy(record.name,“Jerry“);
record.sex = ’M’;
record.score = 85.0;
record.score = 90.0;
record.score = 95.0;
record.num = 1003;
strcpy(record.name,“Jessie“);
record.sex = ’F’;
record.score = 85.0;
record.score = 90.0;
record.score = 95.0;
*/
/*
Info_modify();
int key;
cout《《“请输入您的选择 : “;
cin》》key;

if(key == 1)
{
int targetNum;
cout《《“请输入您欲修改的学生的学号 : “;
cin》》targetNum;

modify_Num(targetNum);
cout《《endl;

display();
}

if(key == 2)
{
char targetName;
cout《《“请输入您欲修改学生的姓名 : “;
cin》》targetName;

modify_Name(targetName);
cout《《endl;

display();
}
if(key == 3)
{
exit(0);
}
*/

show_Start();
menu_CMD();
return 0;
}
//修改完后还应该显示
void show_Start()
{
//cout《《endl;
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《《“\t“《《subject《《“\t“《《subject;
cout《《endl;
}
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《《“请输入您的选择 : “;
cin》》key;
while(1)
{
if((key 《 1)||(key 》 6))
{
int key;
cout《《“您的输入有误,请重新输入!“《《endl;
cout《《“请选(1 - 5) : “;
cin》》key;
}
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;
cin》》choi;
if((choi == ’Y’)||(choi == ’y’))
{
cout《《“请输入学号 : “;
cin》》record[stuNum].num;
cout《《“请输入姓名 : “;
cin》》record[stuNum].name;
cout《《“请输入性别(M为男,F为女) : “;
cin》》record[stuNum].sex;

int i;
for(i = 0;i 《 SUBJECT_NUM;i++)
{
cout《《“请输入“《《subject[i]《《“的成绩 : “;
cin》》record[stuNum].score[i];
}
}
if((choi == ’N’)||(choi == ’n’))
{
cout《《“退出添加新学生信息!“《《endl;
cout《《endl;
}

cout《《“现在已经有“《《stuNum《《“条学生的信息了!“《《endl;
cout《《endl;
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//删除信息 晚上完成...
//显示deleteRecord的表头信息
void Info_delete()
{
cout《《“请输入删除方式 : “《《endl;
cout《《“1. 按学号删除“《《endl;
cout《《“2. 按姓名删除“《《endl;
cout《《“3. 退出删除“《《endl;
}
//删除学生的信息,包含两个子函数
void deleteRecord()
{
int key;
cout《《endl;
Info_delete();
cout《《“请输入您的选择 : “;
cin》》key;

if(key == 1)
{
int targetNum;
cout《《“请输入您欲删除学生的学号 : “;
cin》》targetNum;

//按学号删除
delete_Num(targetNum);
cout《《endl;
}
if(key == 2)
{
char targetName;
cout《《“请输入您欲删除学生的姓名 : “;
cin》》targetName;

//按姓名删除
delete_Name(targetName);
cout《《endl;
}
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();
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex《《“\t“
《《record[i].score《《record[i].score《《“\t“《《record[i].score;
cout《《endl;

cout《《endl《《“删除后学生信息表为 : “《《endl;
show_Table();
for(int i = 1;i 《= stuNum - 1;i++)
{
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
for(int j = 0;j 《 SUBJECT_NUM;j++)
{
cout《《“\t“《《record[i].score[j];
}
cout《《endl;
}
//显示信息应该放在后面
/*
stuNum--;
cout《《“现在还剩下“《《stuNum《《“条学生的信息“;
cout《《endl;
*/
}
//2.第二种情况,欲删除的学生不是最后一位
if(i != stuNum)
{

cout《《“您所要删除的学生信信息是 : “《《endl;
show_Table();
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex《《“\t“
《《record[i].score《《“\t“《《record[i].score《《“\t“《《record[i].score;

for(int j = i+1;j 《= stuNum;j++)
{
record[j-1] = record[j];
}

//接着完成输出

cout《《endl;
cout《《“删除后学生信息表为 : “《《endl;
show_Table();
for(int i = 1;i 《= stuNum-1;i++)
{
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
for(int j = 0;j 《 SUBJECT_NUM;j++)
{
cout《《“\t“《《record[i].score[j];
}
cout《《endl;
}
/*
stuNum--;
cout《《“现在还剩下“《《stuNum《《“条学生的信息“;
cout《《endl;
*/
}

stuNum--;
cout《《“现在还是剩下“《《stuNum《《“条学生的信息“;
cout《《endl;
}
}
}
/*
//方法同上
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();
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex《《“\t“
《《record[i].score《《record[i].score《《“\t“《《record[i].score;
cout《《endl;

cout《《endl《《“删除后学生信息表为 : “《《endl;
show_Table();
for(int i = 1;i 《= stuNum - 1;i++)
{
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
for(int j = 0;j 《 SUBJECT_NUM;j++)
{
cout《《“\t“《《record[i].score[j];
}
cout《《endl;
}
}
//第二种情况 : 欲删除学生不是最后一位
if(i != stuNum)
{

cout《《“您所要删除的学生信信息是 : “《《endl;
show_Table();
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex《《“\t“
《《record[i].score《《“\t“《《record[i].score《《“\t“《《record[i].score;

//整体往前 前移一位
for(int j = i+1;j 《= stuNum;j++)
{
record[j-1] = record[j];
}
cout《《endl;

//接着完成输出
cout《《“删除后学生信息表为 : “《《endl;
show_Table();
for(int i = 1;i 《= stuNum-1;i++)
{
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
for(int j = 0;j 《 SUBJECT_NUM;j++)
{
cout《《“\t“《《record[i].score[j];
}
cout《《endl;
}

cout《《endl;
}
}

}
}
*/
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();
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex《《“\t“
《《record[i].score《《“\t“《《record[i].score《《“\t“《《record[i].score;

cout《《endl;

cout《《“删除后学生信息表为 : “《《endl;
show_Table();
for(int i = 1;i 《= stuNum-1;i++)
{
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
for(int j = 0;j 《 SUBJECT_NUM;j++)
{
cout《《“\t“《《record[i].score[j];
}
cout《《endl;
}
/*
stuNum--;
cout《《“现在还剩下“《《stuNum《《“条学生的信息“;
cout《《endl;
*/
}
//当欲删的学生不是最后一位,整体往前前移一位
if(i != stuNum)
{
cout《《“您所要删除的学生信息是 : “《《endl;

show_Table();
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex《《“\t“;
cout《《record[i].score《《“\t“《《record[i].score《《“\t“《《record[i].score;
cout《《endl;

//整体往前前移一位
for(int j = i+1;j 《= stuNum;j++)
{
record[j-1] = record[j];
}

//然后输出
cout《《endl;
cout《《“删除后学生信息表为 : “《《endl;

show_Table();
for(int i = 1;i 《= stuNum-1;i++)
{
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
for(int j = 0;j 《 SUBJECT_NUM;j++)
{
cout《《“\t“《《record[i].score[j];
}
cout《《endl;
}
/*
stuNum--;
cout《《“现在还剩下“《《stuNum《《“条学生的信息“;
cout《《endl;
*/
}

stuNum--;
cout《《“现在还剩下“《《stuNum《《“条学生的信息“;
cout《《endl;
}
}
}
/*****************************************************************************
******************************************************************************/
//显示modifyRecord的表头信息
void Info_modify()
{
cout《《“请输入修改方式 : “《《endl;
cout《《“1. 按学号修改“《《endl;
cout《《“2. 按姓名修改“《《endl;
cout《《“3. 退出修改“《《endl;
}
//查询学生的成绩,当然里面包括两个子函数
void modifyRecord()
{
int key;
cout《《endl;
Info_modify();
cout《《“请输入您的选择 : “;
cin》》key;
//按学号修改
if(key == 1)
{
int targetNum;
cout《《“请输入您欲修改的学生的学号 : “;
cin》》targetNum;

modify_Num(targetNum);
cout《《endl;

//display();
}

//按姓名修改
if(key == 2)
{
char targetName;
cout《《“请输入您欲修改学生的姓名 : “;
cin》》targetName;

modify_Name(targetName);
cout《《endl;

//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)
{
cout《《endl《《“请修改该学生的信息“《《endl;
cout《《“请输入该学生的学号 : “;
cin》》record[i].num;
cout《《“请输入该学生的姓名 : “;
cin》》record[i].name;
cout《《“请输入该学生的性别 : “;
cin》》record[i].sex;
cout《《“请输入“《《subject《《“的成绩 : “;
cin》》record[i].score;
cout《《“请输入“《《subject《《“的成绩 : “;
cin》》record[i].score;
cout《《“请输入“《《subject《《“的成绩 : “;
cin》》record[i].score;
}
}
}
//按姓名修改
void modify_Name(char tarName)
{
int i;
for(i = 1;i 《= stuNum;i++)
{
if(strcmp(record[i].name,tarName) == 0)
{
cout《《endl《《“请修改该学生的信息 : “《《endl;
cout《《“请输入该学生的学号 : “;
cin》》record[i].num;
cout《《“请输入该学生的姓名 : “;
cin》》record[i].name;
cout《《“请输入该学生的性别 : “;
cin》》record[i].sex;
cout《《“请输入“《《subject《《“的成绩 : “;
cin》》record[i].score;
cout《《“请输入“《《subject《《“的成绩 : “;
cin》》record[i].score;
cout《《“请输入“《《subject《《“的成绩 : “;
cin》》record[i].score;
}
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//显示queryRecord的表头信息
void Info_query()
{
cout《《“请输入查询方式 : “《《endl;
cout《《“1. 按学号查询“《《endl;
cout《《“2. 按姓名查询“《《endl;
cout《《“3. 退出查询“《《endl;
}
//查询学生信息queryRecord
void queryRecord()
{
int key;
cout《《endl;
Info_query();
cout《《“请输入您的选择 : “;
cin》》key;

if(key == 1)
{
int targetNum;
cout《《“请输入您欲查询学生的学号 : “;
cin》》targetNum;

query_Num(targetNum);
cout《《endl;
}

if(key == 2)
{
char targetName;
cout《《“请输入您欲查询学生的学号 : “;
cin》》targetName;

query_Name(targetName);
cout《《endl;
}

//退出查询,退回到主菜单吧...
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();

//显示该学生具体的信息
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
cout《《“\t“《《record[i].score《《“\t“《《record[i].score《《“\t“《《record[i].score;
cout《《endl;
}
}
}
//按姓名查询
void query_Name(char tarName)
{
int i;
for(i = 1;i 《= stuNum;i++)
{
if(strcmp(record[i].name,tarName) == 0)
{
cout《《“该学生的信息如下 : “《《endl;

show_Table();

cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
cout《《“\t“《《record[i].score《《“\t“《《record[i].score《《“\t“《《record[i].score;
cout《《endl;
}
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//先显示所有学生的信息吧
//显示record里所有学生的成绩
void display()
{
show_Table();
int i,j;
for(i = 1;i 《= stuNum;i++)
{
//cout《《“学号“《《“\t“《《“姓名“《《“\t“《《“性别“;
cout《《record[i].num《《“\t“《《record[i].name《《“\t“《《record[i].sex;
for(j = 0;j 《 SUBJECT_NUM;j++)
{
cout《《“\t“《《record[i].score[j];
}
cout《《endl;
}
cout《《endl;
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//退出
void quit()
{
char choi;
cout《《“您确定要退出吗?“《《endl;
cout《《“请输入您的选择(Y/N) : “;
cin》》choi;
if((choi == ’Y’)||(choi == ’y’))
{
cout《《“现在退出学生信息管理系统“《《endl;
exit(0);
}
//如果不是退出,则接着退回到主界面
else
{
cout《《endl;
menu_CMD();
}
}

这个是原创的... 在C-Free 4.0里跑过,可以正常运行
你可以试着跑一下,如果有什么问题可以和我联系
-管理系统

学生成绩管理系统 用C语言编写的 原代码


C语言课程设计任务书
一、题目: 学生成绩管理
二、目的与要求
1. 目的:
(1)基本掌握面向过程程序设计的基本思路和方法;
(2)达到熟练掌握C语言的基本知识和技能;
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题
2. 要求
基本要求:
1. 要求利用C语言面向过程的编程思想来完成系统的设计;
2. 突出C语言的函数特征,以多个函数实现每一个子功能;
3. 画出功能模块图;
4. 进行简单界面设计,能够实现友好的交互;
5. 具有清晰的程序流程图和数据结构的详细定义;
6. 熟练掌握C语言对文件的各种操作。
创新要求:
在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同
三、信息描述
输入一个班10个学生的学号和每个学生考试三门功课(数学、英语、计算机基础)的成绩。编程计算出每个学生的总分和平均分,并按学生成绩优劣排序,最后打印一张按高分到低分名次排序的成绩单。要求:
1)排序用一个函数实现。
2)打印的成绩单表项包括:序号,学号、数学、英语、计算机、总分、平均分。
3)按实验报告电子模板格式填写实验内容。
四、功能描述
1. 学生基本信息及成绩所选科目成绩的录入。
2. 基本信息的查询(分系、班级;分科目)与修改。
3. 对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);
4. 对所开课程的成绩分析(求其平均成绩,最高分和最低分);
5. 对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一学期学生总体成绩进行排名,并显示各科成绩信息)
五. 程序源代码
#include 《stdio.h》
#include 《stdlib.h》
#define STU_NUM 10 /*宏定义学生的数量*/
struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/
{
char stu_id; /*学生学号;*/
float score; /*三门课成绩;*/
float total; /*总成绩;*/
float aver; /*平均成绩;*/
};
/*排序用一个函数来实现*/
void SortScore(student *stu,int n)
{
student stud;
for(int i = 0; i 《 n-1; i++)
for(int j = i+1 ; j 《 n; j++)
{
if(stu[i].total 《 stu[j].total)
{
stud = stu[i];
stu[i] = stu[j];
stu[j] = stud;
}
}
}
int main( )
{
student stu[STU_NUM]; /*创建结构体数组中有10个元素,分别用来保存这10个人的相关信息。*/
/*输入这十个学生的相关信息*/
for(int i = 0; i《STU_NUM; i++)
{
printf(“请输入第%d个学生的学号:“,i+1);
scanf(“%s“,&stu[i].stu_id);
printf(“输入第%d个学生的数学成绩:“,i+1);
scanf(“%f“,&stu[i].score);
printf(“输入第%d个学生的英语成绩:“,i+1);
scanf(“%f“,&stu[i].score);
printf(“输入第%d个学生的计算机成绩:“,i+1);
scanf(“%f“,&stu[i].score);
stu[i].total = stu[i].score+stu[i].score+stu[i].score;
stu[i].aver = stu[i].total/3;
}
printf(“\n“);
SortScore(stu,STU_NUM);/*调用排序函数*/
/*输出排序后的各学生的成绩*/
for(i = 0 ; i 《 STU_NUM; i++)
{
printf(“序号: %d\t“,i);
printf(“学号:%s\t“,stu[i].stu_id);
printf(“数学:%f\t“,stu[i].score);
printf(“英语:%f\t“,stu[i].score);
printf(“计算机:%f\t“,stu[i].score);
printf(“平均成绩:%f\t“,stu[i].aver);
printf(“总分:%f\t“,stu[i].total);
printf(“\n\n“);
}
return 0;
}
注:(源程序中主要标识符含义说明)
#define STU_NUM 10 /*宏定义学生的数量*/
struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/
{
char stu_id; /*学生学号;*/
float score; /*三门课成绩;*/
float total; /*总成绩;*/
float aver; /*平均成绩;*/
}
实验结果:
输入 :(只输入后面的数字,前面的文字是自己产生的)。
请输入第1个学生的学号:001
输入第1个学生的数学成绩:1
输入第1个学生的英语成绩:1
输入第1个学生的计算机成绩:1
请输入第2个学生的学号:002
输入第2个学生的数学成绩:2
输入第2个学生的英语成绩:2
输入第2个学生的计算机成绩:2
请输入第3个学生的学号:003
输入第3个学生的数学成绩:3
输入第3个学生的英语成绩:3
输入第3个学生的计算机成绩:3
请输入第4个学生的学号:004
输入第4个学生的数学成绩:4
输入第4个学生的英语成绩:4
输入第4个学生的计算机成绩:4
请输入第5个学生的学号:005
输入第5个学生的数学成绩:5
输入第5个学生的英语成绩:5
输入第5个学生的计算机成绩:5
请输入第6个学生的学号:006
输入第6个学生的数学成绩:6
输入第6个学生的英语成绩:6
输入第6个学生的计算机成绩:6
请输入第7个学生的学号:007
输入第7个学生的数学成绩:7
输入第7个学生的英语成绩:7
输入第7个学生的计算机成绩:7
请输入第8个学生的学号:008
输入第8个学生的数学成绩:8
输入第8个学生的英语成绩:8
输入第8个学生的计算机成绩:8
请输入第9个学生的学号:009
输入第9个学生的数学成绩:9
输入第9个学生的英语成绩:9
输入第9个学生的计算机成绩:9
请输入第10个学生的学号:010
输入第10个学生的数学成绩:10
输入第10个学生的英语成绩:10
输入第10个学生的计算机成绩:10
输出:
序号: 0 学号:010 数学:10.000000 英语:10.000000 计算机:10.000000
平均成绩:10.000000 总分:30.000000
序号: 1 学号:009 数学:9.000000 英语:9.000000 计算机:9.000000
平均成绩:9.000000 总分:27.000000
序号: 2 学号:008 数学:8.000000 英语:8.000000 计算机:8.000000
平均成绩:8.000000 总分:24.000000
序号: 3 学号:007 数学:7.000000 英语:7.000000 计算机:7.000000
平均成绩:7.000000 总分:21.000000
序号: 4 学号:006 数学:6.000000 英语:6.000000 计算机:6.000000
平均成绩:6.000000 总分:18.000000
序号: 5 学号:005 数学:5.000000 英语:5.000000 计算机:5.000000
平均成绩:5.000000 总分:15.000000
序号: 6 学号:004 数学:4.000000 英语:4.000000 计算机:4.000000
平均成绩:4.000000 总分:12.000000
序号: 7 学号:003 数学:3.000000 英语:3.000000 计算机:3.000000
平均成绩:3.000000 总分:9.000000
序号: 8 学号:002 数学:2.000000 英语:2.000000 计算机:2.000000
平均成绩:2.000000 总分:6.000000
序号: 9 学号:001 数学:1.000000 英语:1.000000 计算机:1.000000
平均成绩:1.000000 总分:3.000000
七、撰写课程设计报告或课程设计总结
课程设计报告要求:
总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。
C语言常见错误
书写标识符时,忽略了大小写字母的区别
main()
{
int a=5;
printf(“%d“,A);
}
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
main()
{
float a,b;
printf(“%d“,a%b);
}
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
char c;
c=“a“;
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a’和‘\’,而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写
if (a=3) then …
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1
b=2
编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;
t=z/100;
printf(“%f“,t);
}
对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
6.多加分号。
对于一个复合语句,如:
{ z=x+y;
t=z/100;
printf(“%f“,t);
};
复合语句的花括号后不应再加分号,否则将会画蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
再如:
for (I=0;I《5;I++);
{scanf(“%d“,&x);
printf(“%d“,x);}
本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7.输入变量时忘记加地址运算符“&”。
int a,b;
scanf(“%d%d“,a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。
8.输入数据的方式与要求不符。①scanf(“%d%d“,&a,&b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,4
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
②scanf(“%d,%d“,&a,&b);
C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
3,4
此时不用逗号而用空格或其它字符是不对的。
3 4 3:4
又如:
scanf(“a=%d,b=%d“,&a,&b);
输入应如以下形式:
a=3,b=4
9.输入字符的格式与要求不一致。
在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
scanf(“%c%c%c“,&c1,&c2,&c3);
如输入a b c
字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
10.输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型
a=3;b=4.5;
printf(“%f%d\n“,a,b);
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
11.输入数据时,企图规定精度。
scanf(“%7.2f“,&a);
这样做是不合法的,输入数据时不能规定精度。
12.switch语句中漏写break语句。
例如:根据考试成绩的等级打印出百分制数段。
switch(grade)
{ case ’A’:printf(“85~100\n“);
case ’B’:printf(“70~84\n“);
case ’C’:printf(“60~69\n“);
case ’D’:printf(“《60\n“);
default:printf(“error\n“);
由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如
case ’A’:printf(“85~100\n“);break;
13.忽视了while和do-while语句在细节上的区别。
(1)main()
{int a=0,I;
scanf(“%d“,&I);
while(I《=10)
{a=a+I;
I++;
}
printf(“%d“,a);
}
(2)main()
{int a=0,I;
scanf(“%d“,&I);
do
{a=a+I;
I++;
}while(I《=10);
printf(“%d“,a);
}
可以看到,当输入I的值小于或等于10时,二者得到的结果相同。而当I》10时,二者结果就不同了。因为while循环是先判断后执行,而do-while循环是先执行后判断。对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。
14.定义数组时误用变量。
int n;
scanf(“%d“,&n);
int a[n];
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。
15.在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。
main()
{static int a={1,2,3,4,5,6,7,8,9,10};
printf(“%d“,a);
}
C语言规定:定义时用a,表示a数组有10个元素。其下标值由0开始,所以数组元素a是不存在的。
16.初始化数组时,未使用静态存储。
int a={0,1,2};
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。应改为:
static int a={0,1,2};
17.在不应加地址运算符&的位置加了地址运算符。
scanf(“%s“,&str);
C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。应改为:
scanf(“%s“,str);
18.同时定义了形参和函数中的局部变量。
int max(x,y)
int x,y,z;
{z=x》y?x:y;
return(z);
}
形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:
int max(x,y)
int x,y;
{int z;
z=x》y?x:y;
return(z);
}
这是我们今年的课设答案,绝对正确哦!!
-学生管理系统源代码

学生成绩管理系统c++源代码


#include 《stdio.h》 #include 《stdlib.h》 struct student { int num; char name; char sex; float score; }stu; struct student1 { int num; char name; char sex; float score; struct student1 *next; }; int main() { void browse(); void input(); void search(); void tongji(); void del(); int flag=1,n; while(flag) { printf(“1----------学生录入\n“); printf(“2----------学生浏览\n“); printf(“3----------学生查询\n“); printf(“4----------学生删除\n“); printf(“5----------成绩统计\n“); printf(“0----------退出系统\n“); printf(“请选择(0----5)\n“); scanf(“%d“,&n); switch(n) { case 1:input();break; case 2:browse();break; case 3:search();break; case 4:del();break; case 5:tongji();break; case 0:flag=0;break; } } return 0; } void input() { FILE *fp; char filename; char c,b; int k; printf(“录入系统\n“); int flag1=1,i=0; printf(“请输入学生学号,姓名,性别,英语成绩,c语言成绩\n“); while(flag1) { scanf(“%d %s %c %f %f“,&stu[i].num,stu[i].name,&stu[i].sex,&stu[i].score,&stu[i].score); i++; scanf(“%c“,&b); printf(“continue?Y/N“); scanf(“%c“,&c); if(c==’n’||c==’N’) flag1=0; if(c==’y’||c==’Y’) flag1=1; } printf(“请输入文件名\n“); scanf(“%s“,filename); fp=fopen(filename,“ab+“); if(fp==NULL) exit(0); else { for(k=0;k《i;k++) fwrite(&stu[k],sizeof(struct student),1,fp); fclose(fp) ; } } void browse() { FILE *fp; char filename; printf(“请输入文件名“); scanf(“%s“,filename); fp=fopen(filename,“rb“); struct student s1,temp; int i=0; while(fread(&s1,sizeof(struct student),1,fp)==1) temp[i++]=s1; int k; for(k=0;k《i;k++) printf(“学号%d 姓名%s 性别%c 英语成绩%f c语言成绩%f\n“,temp[k].num,temp[k].name,temp[k].sex,temp[k].score,temp[k].score); fclose(fp); } void search() { printf(“学生成绩查询\n“); int k,number; FILE *fp; char filename; printf(“请输入文件名:“); scanf(“%s“,filename); printf(“请输入查询学生学号:\n“); scanf(“%d“,&number); fp=fopen(filename,“rb“); struct student s1,temp; int i=0; while(fread(&s1,sizeof(struct student),1,fp)==1) temp[i++]=s1; for(k=0;k《i;k++) if(temp[k].num==number) printf(“学号%d 姓名%s 性别%c 英语成绩%f c语言成绩%f\n“,temp[k].num,temp[k].name,temp[k].sex,temp[k].score,temp[k].score); fclose(fp); } void del() { FILE *fp; int number; char filename; printf(“请输入文件名“); scanf(“%s“,filename); printf(“请输入删除学生学号:\n“); scanf(“%d“,&number); fp=fopen(filename,“rb“); if(fp==NULL) { printf(“该文件不存在“); exit(0); } struct student1 *head,*p,*q; p=(struct student1 *)malloc(sizeof(struct student1)); head=(struct student1 *)malloc(sizeof(struct student1)); q=head; // head=NULL; while(fread(p,sizeof(struct student),1,fp)==1) { q-》next=p; q=p; p=(struct student1 *)malloc(sizeof(struct student1)); } q-》next=NULL; q=head; p=q-》next; // p=NULL; while(p!=NULL) { if(p-》num==number) { q-》next=p-》next; free(p);break; } else { q=p; p=p-》next; } } fclose(fp); printf(“请输入文件名:\n“); scanf(“%s“,filename); fp=fopen(filename,“wb“); if(fp==NULL) exit(0); else { p=head-》next; while(p!=NULL) { fwrite(p,sizeof(struct student),1,fp); p=p-》next; } fclose(fp); } } void tongji() { FILE *fp; char filename; int n,i=0; printf(“请输入文件名:“); scanf(“%s“,filename); fp=fopen(filename,“rb“); struct student s1,temp; while(fread(&s1,sizeof(struct student),1,fp)==1) temp[i++]=s1; int k; for(n=0;n《=100;n++) for(k=0;k《i;k++) { if(temp[k].score==n) printf(“学号%d 姓名%s 性别%c 英语成绩%f c语言成绩%f\n“,temp[k].num,temp[k].name,temp[k].sex,temp[k].score,temp[k].score); } } 撸主参考下!!好的话要给我分哦
-管理系统

学生管理系统源代码


// 请参考我写的学生学籍管理系统,因为它跟你想要的极为相似,只要将结构体内的成员改为你想要的成员// 即可实现你的程序。这点我相信你没有问题的吧。// 源程序是用顺序表实现的。// file1:////////////////////////////////////////////////////////////////////////////////
// SeqList 线性表模板类定义
#ifndef SEQLIST_H
#define SEQLIST_Hconst int MaxSize = 100;
template 《class T》
class SeqList
{
public:
SeqList() { length = 0; } // 无参构造函数
SeqList(T a, int n); // 带参数构造函数
~SeqList() {} // 析构函数
int Length() { return length; } // 求线性表的长度
T Get(int i); // 按位查找,取线性表的第i个元素
int Locate(T x); // 按值查找,求线性表中值为x的元素序号
void Insert(int i, T x); // 在线性表中第i个位置插入值为x的元素
T Delete(int i); // 删除线性表的第i个元素
void PrintList(); // 遍历线性表,按序号依次输出各元素
private:
T data[MaxSize]; // 存放数据元素的数组
int length; // 线性表的长度
};#endif// file2:#include 《iostream》
#include “SeqList.h“
using namespace std;///////////////////////////////////////////////////////////////////////////
// SeqList 模板类实现template 《class T》
SeqList《T》::SeqList(T a, int n)
{
if (n》MaxSize) throw “参数非法“;
for (int i=0; i《n; i++)
data[i] = a[i];
length = n;
}template 《class T》
T SeqList《T》::Get(int i)
{ if (i《1 || i》length) throw “查找位置非法“;
else return data[i-1];
}template 《class T》
int SeqList《T》::Locate(T x)
{
for (int i=0; i《length; i++)
if (data[i] == x) return i+1;
return 0;
}template 《class T》
void SeqList《T》::Insert(int i, T x)
{
if (length 》= MaxSize) throw “上溢“;
if (i《1 || i》length+1) throw “位置异常“;
for (int j=length; j》=i; j--)
data[j] = data[j-1];
data[i-1] = x;
length ++;
}template 《class T》
T SeqList《T》::Delete(int i)
{
if (length == 0) throw “下溢“;
if (i《1 || i》length) throw “位置异常“;
T x = data[i-1];
for (int j=i; j《length; j++)
data[j-1] = data[j];
length --;
return x;
}template 《class T》
void SeqList《T》::PrintList() // 注意:可根据实际需求输出
{
for (int i=0; i《length; i++)
cout 《《 data[i] 《《 ends;
}
// file3:#include 《iostream》
#include 《cstring》
#include “SeqList.cpp“
using namespace std;///////////////////////////////////////////////////////////////////
// Menu 实现对顺序表的操作/*//-----------------------------------------------------------------
对学籍登记表要求完成如下功能:
⑴ 插入:将某学生的基本信息插入到登记表中;
⑵ 删除:将满足条件的基本信息删除;
⑶ 修改:对基本信息的数据项进行修改;
⑷ 查询:查找满足条件的学生;
⑸ 输出:将登记表中的全部(或满足条件)基本信息输出。
*///----------------------------------------------------------------struct Student
{
string num; //学号
string name; //姓名
string sex; //性别
string born; //出生日期
string p; //政治面貌
string addr; //住址
};/////////////////////////////////////////////////////////////////////
// 学籍管理类定义class gxxjgl
{
public:
gxxjgl() {}
~gxxjgl() {}
void Insert();
void Delete1();
void Update();
int Locate();
void Display();private:
SeqList 《Student》 stu; void Info(int i);
};///////////////////////////////////////////////////////////////////////
// 学籍管理类实现void gxxjgl::Insert()
{
Student temp;
char str1, str2, str3, str4, str5, str6; cout 《《 “学号:“;
cin 》》 str1;
temp.num = str1;
cout 《《 “姓名:“;
cin 》》 str2;
temp.name = str2; cout 《《 “性别:“;
cin 》》 str3;
temp.sex = str3; cout 《《 “出生年月:“;
cin 》》 str4;
temp.born = str4; cout 《《 “政治面貌:“;
cin 》》 str5;
temp.p = str5; cout 《《 “住址:“;
cin 》》 str6;
temp.addr = str6; cout 《《 “插入位置(1~“ 《《 stu.Length()+1 《《 “):“;
int i;
cin 》》 i;
stu.Insert(i, temp);
}void gxxjgl::Delete1()
{
int i = Locate();
stu.Delete(i);
}void gxxjgl::Update()
{
int i, j;
char t;
i = Locate();
cout 《《 “请输入要更改的选项(1学号\\2姓名\\3性别\\4出生年月\\5地址):“ ;
cin 》》 j;
cout 《《 “请输入数据:“;
cin 》》 t;
string ts = t;
Student temp = stu.Get(i);
switch (j)
{
case 1:
temp.num = ts;
break;
case 2:
temp.name = ts;
break;
case 3:
temp.sex = ts;
break;
case 4:
temp.born = ts;
break;
case 5:
temp.addr = ts;
break;
default:
cout 《《 “Error\n“;
break;
}
stu.Delete(i);
stu.Insert(i, temp);
}int gxxjgl::Locate()
{
cout 《《 “请输入学生的学号 :“;
char str;
cin 》》 str;
string t = str;
for (int i=1; i《=stu.Length(); i++)
{
if (stu.Get(i).num.compare(t) == 0)
{
Info(i);
return i;
}
}}void gxxjgl::Display()
{
for (int i=1; i《=stu.Length(); i++)
{
cout 《《 stu.Get(i).num.data() 《《 ’\t’;
cout 《《 stu.Get(i).name.data() 《《 ’\t’ ;
cout 《《 stu.Get(i).sex.data() 《《 ’\t’ ;
cout 《《 stu.Get(i).born.data() 《《’\t’;
cout 《《 stu.Get(i).addr.data() 《《 endl;
}
}void gxxjgl::Info(int i)
{
cout 《《 endl;
cout 《《 “学号:“ 《《 stu.Get(i).num.data() 《《 endl;
cout 《《 “姓名:“ 《《 stu.Get(i).name.data() 《《 endl;
cout 《《 “性别:“ 《《 stu.Get(i).sex.data() 《《 endl;
cout 《《 “出生年月:“ 《《 stu.Get(i).born.data() 《《 endl;
cout 《《 “住址:“ 《《 stu.Get(i).addr.data() 《《 endl;
cout 《《 endl;
}//////////////////////////////////////////////////////////////////////////
// 程序入口void main()
{ gxxjgl o;
while (1)
{
cout 《《 “\n\t\t=== 学生学籍管理系统 ===\n“ 《《 endl;
cout 《《 “\t 插入:将某学生的基本信息插入到登记表中;“ 《《 endl;
cout 《《 “\t 删除:将满足条件的基本信息删除;“ 《《 endl;
cout 《《 “\t 修改:对基本信息的数据项进行修改;“ 《《 endl;
cout 《《 “\t 查询:查找满足条件的学生;“ 《《 endl;
cout 《《 “\t 输出:将登记表中的全部(或满足条件)基本信息输出。“ 《《 endl;
cout 《《 “\t 退出程序“ 《《 endl;
cout 《《 “\n请输入您的操作(1\\2\\3\\4\\5\\6):“;
int i;
cin 》》 i;
switch (i)
{
case 1:
o.Insert();
break;
case 2:
o.Delete1();
break;
case 3:
o.Update();
break;
case 4:
o.Locate();
break;
case 5:
o.Display();
break;
case 6:
exit(1);
break;
default:
cout 《《 “Error“ 《《 endl;
break;
}
system(“pause“);
system(“cls“);
}
}
-学生管理系统源代码

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;
}
-管理系统