学生管理系统成型代码(仅供参考)
#include<stdio.h>#include<string.h>
#include <stdlib.h>
#define km 3
int cout = 0;//学生总数
int menu() {
printf("+==============================+\n");
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("+==============================+\n");
printf("| 0 退出系统 |\n");
printf("+==============================+\n");
printf("请选择功能(1,2,3.....):");
}
int cx() {
printf("+==============================+\n");
printf("| 查 询 子 系 统 主 菜 单 |\n");
printf("+==============================+\n");
printf("| 1 全量查询 |\n");
printf("| 2 按学号查询 |\n");
printf("| 3 按姓名查询 |\n");
printf("| 4 按班级查询 |\n");
printf("+==============================+\n");
printf("| 0 返还上一级 |\n");
printf("+==============================+\n");
printf("请选择功能(1,2,3.....):");
}
int xg() {
printf("+==============================+\n");
printf("| 修 改 子 系 统 主 菜 单 |\n");
printf("+==============================+\n");
printf("| 1 按学号修改 |\n");
printf("| 2 按姓名修改 |\n");
printf("| 3 按班级修改 |\n");
printf("+==============================+\n");
printf("| 0 返还上一级 |\n");
printf("+==============================+\n");
printf("请选择功能(1,2,3.....):");
}
int px() {
printf("+==============================+\n");
printf("| 排 序 子 系 统 主 菜 单 |\n");
printf("+==============================+\n");
printf("| 1 按姓名排序 |\n");
printf("| 2 按学号排序 |\n");
printf("| 3 按班级排序 |\n");
printf("+==============================+\n");
printf("| 0 返还上一级 |\n");
printf("+==============================+\n");
printf("请选择功能(1,2,3.....):");
}
int tj() {
printf("+===================================+\n");
printf("| 统 计 子 系 统 主 菜 单 |\n");
printf("+===================================+\n");
printf("| 1 统计某人所有成绩 |\n");
printf("| 2 统计平均分 |\n");
printf("| 3 统计英语平均分以上的人数 |\n");
printf("+===================================+\n");
printf("| 0 返还上一级 |\n");
printf("+===================================+\n");
printf("请选择功能(1,2,3.....):");
}
//=================================学生信息================================
typedef struct Student {
char num[20]; //学号
char name[40]; //姓名
char cla[50]; //班级
int math;
int english;
int cLanguage;
int sum;
struct Student* next; //指向下一个
} STU;
//============================重新输入信息=============================
STU * Student_prin(STU *head) {
system("cls");
STU *q,*p;
char numinput[20];
int sum,cout=0;
head = ( STU *)malloc(sizeof( STU ));
if( NULL== head ) //若头结点为空,创建链表失败
return NULL;
q = head; //(2)
printf("请输入学号,直接回车退出!\n");
gets(numinput);
while(strlen(numinput) != 0) {
p = ( STU *)malloc(sizeof( STU )); //(3)
if( NULL== p ) //若结点为空,申请结点失败,则创建链表结束
return head;
strcpy(p->num, numinput);
printf("请输入姓名:\n");
scanf("%s",p->name) ;
printf("请输入班级:\n");
scanf("%s",p->cla) ;
printf("请输入高数成绩:\n");
scanf("%d",&p->math);
printf("请输入英语成绩:\n");
scanf("%d",&p->english);
printf("请输入高C语言成绩:\n");
scanf("%d",&p->cLanguage);
q->sum=q->english+q->math+q->cLanguage;
cout++;
q->next = p;
q = p;
printf("请输入学号,直接回车退出!\n");
//printf("%s,%d\n",__FUNCTION__,__LINE__);
fflush(stdin);//滤掉scanf未处理的回车符
gets(numinput); //为下一个结点做准备
}
system("cls");
q->next = NULL;
return head;
}
//=================================插入学生信息=========================
void insert(STU *head) {
fflush(stdin);
STU *p, *q, *r;
q = (STU *)malloc(sizeof(STU));
if(NULL==q) {
printf("创建失败\n");
return ;
}
r=head;
p=head->next;
while(p!=NULL) {
r=p;
p=p->next;
}
r->next=q;
printf("请输入插入学生的姓名\n");
gets(q->name);
printf("请输入插入学生的学号\n");
scanf("%lf",&(q->num));
printf("请输入插入学生的班级\n");
scanf("%s",(q->cla));
printf("请依次输入该学生英语,高数,C语言成绩\n");
scanf("%d%d%d",&(q->english),&(q->math),
&(q->cLanguage));
q->sum=q->english+q->math+q->cLanguage;
q->next=NULL;
printf("即将返回菜单\n");
system("cls");
return ;
}
//===========================输出所有信息==========================
void print(STU *head) {
system("cls");
printf("您所需信息如下:\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
STU *q,*p;
p=head->next;
if(head!=NULL)
while(p!=NULL) {
printf(" %s\t %s\t %s\t %d\t %d\t %d\t\n",p->num,p->name,p->cla,p->math,p->english,p->cLanguage);
p=p->next;
//count++;
}
}
// ===========================查询=======================
//===========================全量===========================
void Print_inquire_all(STU *head) {
STU *p;
p=head->next;
do {
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
p = p->next;
} while(p!=NULL);
printf("\n\n");
}
//=============================按姓名查询==================================
int Print_inquire_name(STU *head) {
//void menu_print_out(void);
STU *p;
p=head->next;
char str_name[20];
printf("请输入您要查询的姓名:");
scanf("%s", str_name);
// pt = ReadData();
//menu_print_out();
do {
if(strcmp(p->name,str_name)==0) {
printf("您要查询的信息如下:\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\t\n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
printf("\n\n");
return 0;
}
p = p->next;
} while(p!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return 0;
}
//===================================按学号查询==========================
int Print_inquire_num(STU *head) {
//void menu_print_out(void);
STU *p;
p=head->next;
char str_num[10];
printf("请输入您要查询的学号:");
scanf("%s", str_num);
do {
if(strcmp(p->num,str_num)==0) {
printf("您要查询的信息如下:\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d \n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
printf("\n\n");
return 0;
}
p = p->next;
} while(p!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return 0;
}
//============================按班级查询===================================
int Print_inquire_cla(STU *head) {
//void menu_print_out(void);
STU *p;
p=head->next;
char str_cla[10];
printf("请输入您要查询的班级:");
scanf("%s", str_cla);
do {
if(strcmp(p->cla,str_cla)==0) {
printf("您要查询的信息如下:\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d \n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
printf("\n\n");
return 0;
}
p = p->next;
} while(p!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return 0;
}
//============================查询总控==============================
void menu_inquire(STU* head) {
//system("cls");
//getchar();
system("cls");
cx();
int a = 0;
scanf ("%d",&a);
while(a!=1 &&a!=2&&a!=3 &&a!=4 &&a!=0 ) {
printf("error! please input the right number!\n");
putchar('\a');
getchar();
printf("请选择功能(1,2,3.....):\b\b");
scanf ("%d",&a);
}
switch(a) {
case 1:
Print_inquire_all(head);
system("pause");
getchar();
break;
case 2:
Print_inquire_num(head);
system("pause");
getchar();
break;
case 3:
Print_inquire_name(head);
system("pause");
getchar();
break;
case 4:
Print_inquire_cla(head);
system("pause");
getchar();
break;
case 0:
system("cls");
//printf("%s,%d\n",__FUNCTION__,__LINE__);
menu();
break;
}
}
// ======================统计=============================
//==================某人所有成绩===========================
void Print_statistical_zf(STU* head) {
STU *p;
p=head->next;
char str_name[20];
printf("请输入您要统计总分人的姓名:");
scanf("%s", str_name);
do {
if(strcmp(p->name,str_name)==0) {
p->sum=p->cLanguage+p->english+p->math;
printf("您要统计该人的总分为:");
printf("%d\t\n",p->sum);
printf("\n\n");
return 0;
}
p = p->next;
} while(p!=NULL);
printf("数据库中没有存储您需要的数据!\n");
printf("\n\n");
return 0;
}
//======================统计某人平均分========================
void Print_statistical_VGE(STU *head) {
STU *p;
p=head->next;
int sum=0;
char str_name[20];
printf("请输入您要统计总分人的姓名:");
scanf("%s", str_name);
if(NULL!=p)
printf("%d\n",(p->cLanguage +p->english +p->math )/3);
printf("\n\n");
return 0;
}
//======================高于英语平均分人数====================
void Print_statistical_gy(STU *head) {
STU *p;
p=head->next;
int s=0;
while(NULL!=p)
if(p->cLanguage>60);
s++;
printf("%d\n",s);
}
//==========================统计总控===========================
void menu_statistical(STU* head) {
system("cls");
tj();
int a = 0;
scanf ("%d",&a);
while(a!=1 &&a!=2&&a!=3 &&a!=0 ) {
printf("error! please input the right number!\n");
putchar('\a');
getchar();
printf("请选择功能(1,2,3.....):\b\b");
scanf ("%d",&a);
}
switch(a) {
case 1:
Print_statistical_zf(head);
system("pause");
getchar();
break;
case 2:
Print_statistical_VGE(head);
system("pause");
getchar();
break;
case 3:
Print_statistical_gy(head) ;
system("pause");
getchar();
break;
case 0:
system("cls");
//printf("%s,%d\n",__FUNCTION__,__LINE__);
menu();
break;
}
}
// ===============================排序=========================
//=============================按姓名排序=========================
void Print_sort_name(STU *head) {
int i,n;
STU *p,*q,*max,temp,*temp_p;
if(head==NULL) {
printf("文件未能打开,请重新输入!\n");
getchar();
return;
}
for(p=head->next; p->next!=NULL; p=p->next) {
max=p;
for(q=p->next; q!=NULL; q=q->next) {
if(max->name<q->name)
max=q;
}
temp=*p;
*p=*max;
*max=temp;
temp_p=max->next;
max->next=p->next;
p->next=temp_p;
}
for(p=head->next; p!=NULL; p=p->next) {
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\n ") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\n",p->num,p->name,p->cla,p->math,p->english,p->cLanguage);
}
getchar();
}
//================================按学号排序===========================
void Print_sort_num(STU *head) {
int i,n;
STU *p,*q,*max,temp,*temp_p;
if(head==NULL) {
printf("文件未能打开,请重新输入!\n");
getchar();
return;
}
for(p=head->next; p->next!=NULL; p=p->next) {
max=p;
for(q=p->next; q!=NULL; q=q->next) {
if(max->num<q->num)
max=q;
}
temp=*p;
*p=*max;
*max=temp;
temp_p=max->next;
max->next=p->next;
p->next=temp_p;
}
for(p=head->next; p!=NULL; p=p->next) {
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\n ") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\n",p->num,p->name,p->cla,p->math,p->english,p->cLanguage);
}
getchar();
}
//==============================按班级排序============================
void Print_sort_cla(STU *head) {
int i,n;
STU *p,*q,*max,temp,*temp_p;
if(head==NULL) {
printf("文件未能打开,请重新输入!\n");
getchar();
return;
}
for(p=head->next; p->next!=NULL; p=p->next) {
max=p;
for(q=p->next; q!=NULL; q=q->next) {
if(max->num<q->num)
max=q;
}
temp=*p;
*p=*max;
*max=temp;
temp_p=max->next;
max->next=p->next;
p->next=temp_p;
}
for(p=head->next; p!=NULL; p=p->next) {
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\n ") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\n",p->num,p->name,p->cla,p->math,p->english,p->cLanguage);
}
getchar();
}
//=================================排序总控==============================
void menu_sort(STU* head) {
system("cls");
px();
int a = 0;
scanf ("%d",&a);
while(a!=1 &&a!=2&&a!=3 &&a!=0 ) {
printf("error! please input the right number!\n");
putchar('\a');
getchar();
printf("请选择功能(1,2,3.....):\b\b");
scanf ("%d",&a);
}
switch(a) {
case 1:
Print_sort_name(head);
system("pause");
getchar();
break;
case 2:
Print_sort_num(head);
system("pause");
getchar();
break;
case 3:
Print_sort_cla(head) ;
system("pause");
getchar();
break;
case 0:
system("cls");
//printf("%s,%d\n",__FUNCTION__,__LINE__);
menu();
break;
}
}
//========================================修改====================
//====================================按学号修改===================
int Print_Modify_num(STU *head) {
STU *p;
p=head->next;
char str_num[20];
printf("请输入您要修改的学号:");
scanf("%s", str_num);
do {
if(strcmp(p->num,str_num)==0) {
printf("该生原信息如下\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d \n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
printf("\n\n");
printf("请输入修改后的信息\n");
printf("按照学号姓名班级高数英语C语言成绩输入中间加空格\n");
scanf("%s %s %s %d %d %d",p->num,p->name,p->cla,&p->math,&p->english,&p->cLanguage);
printf("修改后信息如下\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\t\n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
return 0;
}
p = p->next;
} while(p!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return 0;
}
//======================按姓名修改=========================
int Print_Modify_name(STU *head) {
STU *p;
p=head->next;
char str_name[20];
printf("请输入您要修改的姓名:");
scanf("%s", str_name);
do {
if(strcmp(p->name,str_name)==0) {
printf("该生原信息如下\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\t\n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
printf("\n\n");
printf("请输入修改后的信息\n");
printf("按照学号姓名班级高数英语C语言成绩输入中间加空格\n");
scanf("%s %s %s %d %d %d",p->num,p->name,p->cla,&p->math,&p->english,&p->cLanguage);
printf("修改后信息如下\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\t\n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
return 0;
}
p = p->next;
} while(p!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return 0;
}
//=============================按班级修改=============================
int Print_Modify_cla(STU *head) {
STU *p;
p=head->next;
char str_cla[20];
printf("请输入您要修改的姓名:");
scanf("%s", str_cla);
do {
if(strcmp(p->cla,str_cla)==0) {
printf("该生原信息如下\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\t\n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
printf("\n\n");
printf("请输入修改后的信息\n");
printf("按照学号姓名班级高数英语C语言成绩输入中间加空格\n");
scanf(" %s %s %s %d %d %d",p->num,p->name,p->cla,&p->math,&p->english,&p->cLanguage);
printf("修改后信息如下\n");
printf(" 学号\t 姓名\t 班级\t 高数\t 英语\t C语言\t\n") ;
printf(" %s\t %s\t %s\t %d\t %d\t %d\t\n",
p->num,p->name,p->cla,p->math,p->english,
p->cLanguage);
return 0;
}
p = p->next;
} while(p!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return 0;
}
//===================================修改总控===============================
void menu_Modify(STU* head) {
system("cls");
xg();
int a = 0;
scanf ("%d",&a);
while(a!=1 &&a!=2&&a!=3 &&a!=0 ) {
printf("error! please input the right number!\n");
putchar('\a');
getchar();
printf("请选择功能(1,2,3.....):\b\b");
scanf ("%d",&a);
}
switch(a) {
case 1:
Print_Modify_num(head);
system("pause");
getchar();
break;
case 2:
Print_Modify_name(head);
system("pause");
getchar();
break;
case 3:
Print_Modify_cla(head) ;
system("pause");
getchar();
break;
case 0:
system("cls");
//printf("%s,%d\n",__FUNCTION__,__LINE__);
menu();
break;
}
}
int main() {
int n;
STU *head=NULL;
menu();
while(1) {
scanf("%d",&n);
getchar();
switch(n) {
case 1:
head = Student_prin(head);
menu();
break;
case 2:
insert(head);
menu();
break;
case 3:
print(head);
menu();
break;
case 4:
menu_inquire(head);
menu();
break;
case 5:
menu_statistical(head) ;
break;
case 6:
menu_sort(head) ;
menu();
break;
case 7:
menu_Modify(head) ;
menu();
break;
case 0:
exit(0);
break;
}
}
}