源代码:
//
//
// Created by zhen7216 on 16/9/6.
// Copyright 2016年 zhen7216. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义学生结构体
struct Player {
char name[50]; //姓名
char role[20]; //性别
int height; //身高
int weight; //体重
double number; //学号
int wage; //英语
int score; //高数
struct Player *next;
};
typedef struct Player player;
void creat_list(player*, player*, player*);
void print_list(player*);
void password();
void main_menu();
void clea();
void choosemenu(player*, player*, player*, int);
void add (player*);
void query_menu ();
void come_query (player*);
void search_name (player*);
void search_height(player*);
void search_weight (player*);
void search_wage (player*);
void search_score (player*);
void search_number (player*);
void analysis_menu();
void come_analysis (player*);
void come_ave (player*);
void print_height (player*);
void ave_menu();
void print_weight (player*);
void print_wage (player*);
void print_score (player*);
void more_menu();
void came_more (player*);
void more_wage (player*);
void more_score (player*);
void more_height (player*);
void sort_menu ();
void came_sort (player*);
void sort_score(player*);
void sort_height(player*);
void sort_wage(player*);
void putf_list(player*);
void read_list (player*);
int main()
{
int iChoice;
player *head;
player *q;
player *p;
head = (player *)malloc(sizeof(player));
if (NULL == head) {
printf("申请失败\n");
exit(0);
}
q = NULL;
p = NULL;
head->next = NULL;
password();
main_menu();
while (scanf("%d",&iChoice) != EOF) {
choosemenu(head,p,q,iChoice);
main_menu();
}
free(head);
return 0;
}
//输入密码操作
void password() {
int iPass;
int iCount = 3;
printf(" -------------------------------\n");
printf("*** --|学生管理系统登陆界面|-- ***\n");
printf("| ------------------------------- |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("*---- 登陆 ---*\n");
printf("*---- 注册 ---*\n");
printf("*---- 请输入管理员密码 ---*\n");
printf("| ------------------ |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("+------------------------------------------------+\n");
scanf("%d", &iPass);
while (iPass!=12345)
{
iCount--;
if (iCount == 0)
exit(0);
clea();
printf("密码错误,您还有%d机会\n",iCount);
printf("请输入管理员密码:");
scanf("%d", &iPass);
}
clea();
printf("您已成功登陆\n");
return;
}
//主菜单
void main_menu() {
fflush(stdin);
//clea();
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("*** 8.读盘 ***\n");
printf("**************************************************\n");
printf("*** 0.退出 ***\n");
printf("**************************************************\n");
printf("请输入(0-8):");
return;
}
//进入主菜单选项
void choosemenu(player *head, player *p, player *q, int iChoice) {
fflush(stdin);
switch(iChoice)
{
case 1:
creat_list(head, p, q);
break;
case 2:
add(head);
break;
case 3:
clea();
print_list(head);
break;
case 4:
clea();
query_menu();
come_query(head);
break;
case 5:
analysis_menu();
come_analysis (head);
break;
case 6:
sort_menu ();
came_sort (head);
break;
case 7:
putf_list(head);
break;
case 8:
read_list (head);
break;
case 0:
printf("东软欢迎您. \n");
exit(0);
}
}
//清屏函数
void clea() {
system("cls");
return;
}
//创建链表
void creat_list(player *head, player *p, player *q) {
char name [100];
q = head;
fflush(stdin);
printf("请输入学生姓名:\n");
gets(name);
while (strlen(name) != 0) {
p = (player*)malloc(sizeof(player));
if (NULL == p) {
printf("申请失败\n");
return;
}
strcpy(p->name, name);
printf("请输入学生性别:\n");
gets(p->role);
printf("请输入学生身高(cm):\n");
scanf("%d",&p->height);
printf("请输入学生体重(kg):\n");
scanf("%d",&p->weight);
printf("请输入学生学号:\n");
scanf("%lf",&p->number);
printf("请输入学生英语成绩:\n");
scanf("%d",&p->wage);
printf("请输入学生高数成绩:\n");
scanf("%d",&p->score);
q->next = p;
q = p;
fflush(stdin);//清空缓冲区
clea();
printf("请输入学生姓名(回车键返回主菜单): \n");
gets(name);
}
p->next = NULL;
return;
}
//遍历链表
void print_list(player *head) {
player *p;
p = head->next;
if (NULL == p) {
printf("没有数据!\n");
return;
}
while (p != NULL) {
printf("姓名:");
puts(p->name);
printf("性别:");
puts(p->role);
printf("身高:");
printf("%d",p->height);
printf("\n");
printf("体重:");
printf("%d",p->weight);
printf("\n");
printf("学号:");
printf("%.0lf",p->number);
printf("\n");
printf("英语:");
printf("%d",p->wage);
printf("\n");
printf("高数:");
printf("%d",p->score);
printf("\n");
p = p->next;
printf("************************\n");
}
}
//补录成员
void add (player *head) {
fflush(stdin);
player *p;
player *q;
player *r;
q = (player*)malloc(sizeof(player));
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");
gets(q->role);
printf("请输入学生身高(cm):\n");
scanf("%d",&q->height);
printf("请输入学生体重(kg):\n");
scanf("%d",&q->weight);
printf("请输入学生学号:\n");
scanf("%lf",&q->number);
printf("请输入学生英语成绩:\n");
scanf("%d",&q->wage);
printf("请输入高数成绩:\n");
scanf("%d",&q->score);
q->next = NULL;
clea();
return;
}
//查询子系统菜单
void query_menu() {
fflush(stdin);
printf("*********-查询子系统-*********\n");
printf("*** 1.按姓名查询 ***\n");
printf("*** 2.按身高查询 ***\n");
printf("*** 3.按体重查询 ***\n");
printf("*** 4.按英语查询 ***\n");
printf("*** 5.按高数查询 ***\n");
printf("*** 6.按学号查询 ***\n");
printf("******************************\n");
printf("*** 0.退出 ***\n");
printf("******************************\n");
printf("请输入(0-6):");
return;
}
//进入查询菜单选项
void come_query (player *head) {
fflush(stdin);
int n;
if (NULL == head->next) {
clea();
printf("没有数据\n");
return;
}
scanf("%d",&n);
clea();
switch (n) {
case 1:
search_name (head);
break;
case 2:
search_height(head);
break;
case 3:
search_weight(head);
break;
case 4:
search_wage (head);
break;
case 5:
search_score (head);
break;
case 6:
search_number (head);
break;
case 0:
return;
break;
}
}
//按姓名查询
void search_name (player *head) {
fflush(stdin);
char name[40];
int True = 0;
printf("请输入要查找学生的姓名:");
gets(name);
player *p;
p = head->next;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
True = 1;
break;
}
p = p->next;
}
if(True) {
clea();
printf("姓名:");
puts(p->name);
printf("位置:");
puts(p->role);
printf("身高:");
printf("%d",p->height);
printf("\n");
printf("体重:");
printf("%d",p->weight);
printf("\n");
printf("学生学号:");
printf("%.0lf",p->number);
printf("\n");
printf("英语成绩:");
printf("%d",p->wage);
printf("\n");
printf("高数成绩:");
printf("%d",p->score);
printf("\n");
}
else {
clea();
printf("没有找到该学生信息\n");
}
}
//按身高查询
void search_height (player *head) {
fflush(stdin);
int height;
int True = 0;
printf("请输入要查找学生的身高:");
scanf("%d",&height);
player *p;
p = head->next;
while (p != NULL) {
if (height == p->height) {
True = 1;
break;
}
p = p->next;
}
if (True) {
clea();
printf("姓名:");
puts(p->name);
printf("位置:");
puts(p->role);
printf("身高:");
printf("%d",p->height);
printf("\n");
printf("体重:");
printf("%d",p->weight);
printf("\n");
printf("球衣号码:");
printf("%d",p->number);
printf("\n");
printf("工资:");
printf("%d",p->wage);
printf("\n");
printf("得分:");
printf("%d",p->score);
printf("\n");
}
else {
clea();
printf("没有找到该学生信息\n");
}
}
//按体重查询
void search_weight (player *head) {
fflush(stdin);
int weight;
int True = 0; //判断是否找到
printf("请输入要查找学生的体重:");
scanf("%d",&weight);
player *p;
p = head->next;
while (p != NULL) {
if (weight == p->weight) {
True = 1;
break;
}
p = p->next;
}
if (True) {
clea();
printf("姓名:");
puts(p->name);
printf("性别:");
puts(p->role);
printf("身高:");
printf("%d",p->height);
printf("\n");
printf("体重:");
printf("%d",p->weight);
printf("\n");
printf("学号:");
printf("%.0lf",p->number);
printf("\n");
printf("英语成绩:");
printf("%d",p->wage);
printf("\n");
printf("高数成绩:");
printf("%d",p->score);
printf("\n");
}
else{
clea();
printf("没有找到该学生信息\n");
}
}
//按英语查询
void search_wage (player *head) {
fflush(stdin);
int wage;
int True = 0; //判断是否找到
printf("请输入要查找学生的英语成绩:");
scanf("%d",&wage);
player *p;
p = head->next;
while (p != NULL) {
if (wage == p->wage) {
True = 1;
break;
}
p = p->next;
}
if (True) {
clea();
printf("姓名:");
puts(p->name);
printf("性别:");
puts(p->role);
printf("身高:");
printf("%d",p->height);
printf("\n");
printf("体重:");
printf("%d",p->weight);
printf("\n");
printf("学号:");
printf("%.0lf",p->number);
printf("\n");
printf("英语成绩:");
printf("%d",p->wage);
printf("\n");
printf("高数成绩:");
printf("%d",p->score);
printf("\n");
}
else {
clea();
printf("没有找到该学生信息\n");
}
}
//按高数成绩查询
void search_score (player *head) {
fflush(stdin);
int score;
int True = 0; //判断是否找到
printf("请输入要查找学生的高数成绩:");
scanf("%d",&score);
player *p;
p = head->next;
while (p != NULL) {
if (score == p->score) {
True = 1;
break;
}
p = p->next;
}
if (True) {
clea();
printf("姓名:");
puts(p->name);
printf("位置:");
puts(p->role);
printf("身高:");
printf("%d",p->height);
printf("\n");
printf("体重:");
printf("%d",p->weight);
printf("\n");
printf("学号:");
printf("%.0lf",p->number);
printf("\n");
printf("英语成绩:");
printf("%d",p->wage);
printf("\n");
printf("高数成绩:");
printf("%d",p->score);
printf("\n");
}
else {
clea();
printf("没有找到该学生信息\n");
}
}
//按学号查询
void search_number (player *head) {
fflush(stdin);
int number;
int True = 0; //判断是否找到
printf("请输入要查找学生的学号:");
scanf("%lf",&number);
player *p;
p = head->next;
while (p != NULL) {
if (number == p->number) {
True = 1;
break;
}
p = p->next;
}
if (True) {
clea();
printf("姓名:");
puts(p->name);
printf("性别:");
puts(p->role);
printf("身高:");
printf("%d",p->height);
printf("\n");
printf("体重:");
printf("%d",p->weight);
printf("\n");
printf("学生学号:");
printf("%.0lf",p->number);
printf("\n");
printf("英语成绩:");
printf("%d",p->wage);
printf("\n");
printf("高数成绩:");
printf("%d",p->score);
printf("\n");
}
else {
clea();
printf("没有找到该学生信息\n");
}
}
//统计分析子系统菜单
void analysis_menu() {
clea();
fflush(stdin);
printf("**********-统计分析子系统菜单-**********\n");
printf("\n");
printf("---- 1.统计所有学生某项数据平均得分 ----\n");
printf("---- 2.统计某数据高于平均得分的人数 ----\n");
printf("\n");
printf("****************************************\n");
printf("---- 0.返回上一级 ----\n");
printf("****************************************\n");
printf("请输入(0-2):");
}
//进入统计分析子系统菜单
void come_analysis (player *head) {
fflush(stdin);
if (NULL == head->next) {
clea();
printf("没有数据\n");
return;
}
int n;
scanf("%d",&n);
clea();
switch (n) {
case 1:
ave_menu();
come_ave (head);
break;
case 2:
more_menu();
came_more (head);
break;
case 0:
return;
break;
}
}
//显示各项平均数据菜单
void ave_menu() {
fflush(stdin);
clea();
printf("********-显示各项平均数据菜单-********\n");
printf("*** 1.所有学生平均身高 ***\n");
printf("*** 2.所有学生平均体重 ***\n");
printf("*** 3.所有学生平均英语成绩 ***\n");
printf("*** 4.所有学生平均高数成绩 ***\n");
printf("**************************************\n");
printf("*** 0.返回上一级 ***\n");
printf("**************************************\n");
printf("请输入(0-4):");
}
//选择各项平均数据统计
void come_ave (player *head) {
fflush(stdin);
int n;
scanf("%d",&n);
clea();
switch (n) {
case 1:
print_height (head);
break;
case 2:
print_weight (head);
break;
case 3:
print_wage (head);
break;
case 4:
print_score (head);
break;
case 0:
return;
break;
}
}
//输出身高平均值
void print_height (player *head) {
double sum = 0.0;
int account = 0;
player *p;
p = head->next;
while (p != NULL) {
sum += p->height;
account++;
p = p->next;
}
clea();
printf("所有球员平均身高为:%.1lfcm\n",sum/account);
}
//输出体重平均值
void print_weight (player *head) {
double sum = 0.0;
int account = 0;
player *p;
p = head->next;
while (p != NULL) {
sum += p->weight;
account++;
p = p->next;
}
clea();
printf("所有球员平均体重为:%.1lfkg\n",sum/account);
}
//输出英语平均值
void print_wage (player *head) {
double sum = 0.0;
int account = 0;
player *p;
p = head->next;
while (p != NULL) {
sum += p->wage;
account++;
p = p->next;
}
clea();
printf("所有球员平均英语成绩为:%.1lf分\n",sum/account);
}
//输出高数平均值
void print_score (player *head) {
double sum = 0.0;
int account = 0;
player *p;
p = head->next;
while (p != NULL) {
sum += p->score;
account++;
p = p->next;
}
clea();
printf("所有学生高数平均得分为:%.1lf分\n",sum/account);
}
//显示某项得分高于平均分的菜单
void more_menu() {
fflush(stdin);
printf("***某项得分高于平均分的菜单***\n");
printf("* 1.英语 *\n");
printf("* 2.高数 *\n");
printf("* 3.身高 *\n");
printf("******************************\n");
printf("* 0.返回上一级 *\n");
printf("******************************\n");
printf("请输入(0-3):");
}
//选择各项超出平均值的人数
void came_more (player *head) {
fflush(stdin);
int n;
scanf("%d",&n);
clea();
switch (n) {
case 1:
more_wage (head);
break;
case 2:
more_score (head);
break;
case 3:
more_height (head);
break;
case 0:
return;
break;
}
}
//输出高于英语平均值的人数
void more_wage (player *head) {
clea();
double sum = 0.0;
int account = 0;
int people = 0;
double ave = 0.0;
player *p;
p = head->next;
while (p != NULL) {
sum += p->wage;
account++;
p = p->next;
}
ave = sum/account;
p = head->next;
while (p != NULL) {
if (p->wage > ave)
people++;
p = p->next;
}
printf("高于平均英语的有%d人\n",people);
}
//输出高于高数平均值的人数
void more_score (player *head) {
clea();
double sum = 0.0;
int account = 0;
int people = 0;
double ave = 0.0;
player *p;
p = head->next;
while (p != NULL) {
sum += p->score;
account++;
p = p->next;
}
ave = sum/account;
p = head->next;
while (p != NULL) {
if (p->score > ave)
people++;
p = p->next;
}
printf("高于高数平均得分的有%d人\n",people);
}
//输出高于身高平均值的人数
void more_height (player *head) {
clea();
double sum = 0.0;
int account = 0;
int people = 0;
double ave = 0.0;
player *p;
p = head->next;
while (p != NULL) {
sum += p->height;
account++;
p = p->next;
}
ave = sum/account;
p = head->next;
while (p != NULL) {
if (p->height > ave)
people++;
p = p->next;
}
printf("高于平均得分的有%d人\n",people);
}
//排序子系统菜单
void sort_menu () {
fflush(stdin);
clea();
printf("********-排序子系统菜单-********\n");
printf("** 1.按高数成绩升序排列 **\n");
printf("** 2.按身高升序排列 **\n");
printf("** 3.按英语升序排列 **\n");
printf("********************************\n");
printf("** 0.返回上一级 **\n");
printf("********************************\n");
printf("请输入(0-3):");
}
//选择要排序的数据
void came_sort (player *head) {
fflush(stdin);
if (NULL == head->next) {
clea();
printf("没有数据\n");
return;
}
int n;
scanf("%d",&n);
clea();
switch (n) {
case 1:
sort_score (head);
break;
case 2:
sort_height (head);
break;
case 3:
sort_wage (head);
break;
case 0:
return;
break;
}
}
//升序排列高数
void sort_score (player *head) {
player *p;
player *r;
char na[400];
int temp;
p = head->next;
r = p->next;
while (r != NULL) {
if (p->score > r->score) {
strcpy(na, p->name);
strcpy(p->name, r->name);
strcpy(r->name, na);
strcpy(na, p->role);
strcpy(p->role, r->role);
strcpy(r->role, na);
temp = p->height;
p->height = r->height;
r->height = temp;
temp = p->number;
p->number = r->number;
r->number = temp;
temp = p->score;
p->score = r->score;
r->score = temp;
temp = p->wage;
p->wage = r->wage;
r->wage = temp;
temp = p->weight;
p->weight = r->weight;
r->weight = temp;
}
p = p->next;
r = r->next;
}
}
//升序排列身高
void sort_height (player *head) {
player *p;
player *r;
char na[400];
int temp;
p = head->next;
r = p->next;
while (r != NULL) {
if (p->height > r->height) {
strcpy(na, p->name);
strcpy(p->name, r->name);
strcpy(r->name, na);
strcpy(na, p->role);
strcpy(p->role, r->role);
strcpy(r->role, na);
temp = p->height;
p->height = r->height;
r->height = temp;
temp = p->number;
p->number = r->number;
r->number = temp;
temp = p->score;
p->score = r->score;
r->score = temp;
temp = p->wage;
p->wage = r->wage;
r->wage = temp;
temp = p->weight;
p->weight = r->weight;
r->weight = temp;
}
p = p->next;
r = r->next;
}
}
//升序排列英语
void sort_wage (player *head) {
player *p;
player *r;
char na[400];
int temp;
p = head->next;
r = p->next;
while (r != NULL) {
if (p->wage > r->wage) {
strcpy(na, p->name);
strcpy(p->name, r->name);
strcpy(r->name, na);
strcpy(na, p->role);
strcpy(p->role, r->role);
strcpy(r->role, na);
temp = p->height;
p->height = r->height;
r->height = temp;
temp = p->number;
p->number = r->number;
r->number = temp;
temp = p->score;
p->score = r->score;
r->score = temp;
temp = p->wage;
p->wage = r->wage;
r->wage = temp;
temp = p->weight;
p->weight = r->weight;
r->weight = temp;
}
p = p->next;
r = r->next;
}
}
//读盘
void read_list (player *head) {
player *p;
FILE *fp;
fp = fopen("file.txt", "r+");
head->next = NULL;
if (NULL == fp) {
printf("文件打开失败\n");
return;
}
while (!feof(fp)) {
p = (player*)malloc(sizeof(player));
if (fread(p,sizeof(player),1,fp)) {
p->next = head->next;
head->next = p;
}
else
free(p);
}
if( NULL != fp )
fclose(fp);
printf("文件读入成功\n");
return;
}
//存盘
void putf_list(player *head) {
player *p;
FILE *fp;
if (NULL == head){
printf("没有数据\n");
return;
}
fp = fopen("file.txt", "w");
if (NULL == fp) {
printf("文件打开失败\n");
return;
}
p = head->next;
while (p != NULL) {
fwrite(p,sizeof(player),1,fp);
p=p->next;
}
if (fp != NULL)
fclose(fp);
printf("文件写入成功\n");
return;
}
运行结果: