赞
踩
- #ifndef TEST_H
- #define TEST_H
- #define MAX_SIZE 100
-
- //定义学生类型
- typedef struct
- {
- char name[20]; //姓名
- int age; //年龄
- double score; //分数
- }datatype;
-
- //定义班级类型
- typedef struct
- {
- datatype student[MAX_SIZE]; //定义学生容器
- int size; //实际学生人数
- }class,*class_ptr;
-
- //函数声明
- //创建班级函数
- class_ptr Create_Stu();
-
- //判空函数
- int Empty(class_ptr P);
-
- //判满函数
- int Full(class_ptr P);
-
- //信息录入
- int Enter_Stu(class_ptr P);
-
- //学生信息输出
- void Print_Stu(class_ptr P);
-
- //按姓名查找学生位置
- int Search_name(class_ptr P,const char *ptr);
-
- //按位置输出学生信息
- void Print_pos(class_ptr P,int pos);
-
- //按位置修改学生新信息
- int Update_pos(class_ptr P,int pos);
-
- //按位置删除学生信息
- int Delete_pos(class_ptr P,int pos);
-
- //学生信息去重
- int Unique(class_ptr P);
-
- //按成绩降序排序
- void Sort_Stu(class_ptr P);
-
- //输出成绩最值学生信息
- void Print_Best(class_ptr P);
-
- //销毁班级容器
- void destroy(class_ptr P);
-
- #endif
- #include <myhead.h>
- #include "sys.h"
-
- //创建班级
- class_ptr Create_Stu()
- {
- //申请堆区空间
- class_ptr P = (class_ptr)malloc(sizeof(class));
- if(NULL == P)
- {
- printf("创建失败\n");
- return NULL;
- }
- //申请成功
- //给申请空间初始化
- memset(P,0,sizeof(class));
- P->size =0;
-
- //将内存地址返回
- printf("创建班级成功\n");
- return P;
- }
-
- //判空函数
- int Empty(class_ptr P)
- {
- return P->size ==0;
- }
-
- //判满函数
- int Full(class_ptr P)
- {
- return P->size ==MAX_SIZE;
- }
-
- //信息录入
- int Enter_Stu(class_ptr P)
- {
- //判断合法性
- if(NULL == P || Full(P))
- {
- printf("error\n");
- return -1 ;
- }
-
- //录入学生信息
-
- printf("请输入学生姓名:");
- scanf("%s",P->student[P->size].name);
- getchar();
-
- printf("请输入学生年龄:");
- scanf("%d",&P->student[P->size].age);
- getchar();
-
- printf("请输入学生成绩:");
- scanf("%lf",&P->student[P->size].score);
- getchar();
-
- printf("\n");
-
- //录入完成
- //长度增加
- P->size++;
- printf("录入成功\n");
- return 0;
- }
-
- //学生信息输出
- void Print_Stu(class_ptr P)
- {
- //判断合法性
- if(NULL == P || Empty(P))
- {
- printf("error\n");
- return;
- }
-
- //循环输出学生信息
- printf("**********学生信息如下*********\n");
- printf("姓名\t年龄\t成绩\n\n");
- for(int i=0;i<P->size;i++)
- {
- printf("%s\t%d\t%lf\n",\
- P->student[i].name,P->student[i].age,P->student[i].score);
- printf("\n");
- }
- }
-
- //按姓名查找学生位置
- int Search_name(class_ptr P,const char *ptr)
- {
- //判断合法性
- if(NULL == P || Empty(P))
- {
- printf("error\n");
- return 0 ;
- }
-
- //遍历查找
- for(int i =0;i<P->size;i++)
- {
- if(strcmp(P->student[i].name , ptr ) == 0)
- {
- //查找成功,返回下标
- return i;
- }
- }
- return -1;
- }
-
- //按位置输出学生信息
- void Print_pos(class_ptr P,int pos)
- {
- //判断合法性
- if(NULL == P || Empty(P) || pos < 0 || pos>P->size)
- {
- printf("error\n");
- return ;
- }
-
- //输出信息
- printf("**********学生信息如下*********\n");
- printf("姓名\t年龄\t成绩\n\n");
- printf("%s\t%d\t%lf\n",\
- P->student[pos].name,P->student[pos].age,P->student[pos].score);
- printf("\n");
- }
-
- //按位置修改学生新信息
- int Update_pos(class_ptr P,int pos)
- {
- //判断合法性
- if(NULL == P || pos < 0 || pos>P->size)
- {
- printf("error\n");
- return -1;
- }
-
- //按位置重新输入刷新学生信息
- printf("请输入新学生姓名:");
- scanf("%s",P->student[pos].name);
- getchar();
-
- printf("请输入新学生年龄:");
- scanf("%d",&P->student[pos].age);
- getchar();
-
- printf("请输入新学生成绩:");
- scanf("%lf",&P->student[pos].score);
- getchar();
-
- printf("修改成功\n");
-
- return 0;
- }
-
- //按位置删除学生信息
- int Delete_pos(class_ptr P,int pos)
- {
- //判断合法性
- if(NULL == P || Full(P) || pos < 0 || pos>P->size)
- {
- printf("error\n");
- return -1;
- }
-
- //删除
- for(int i=pos+1;i<P->size;i++)
- {
- P->student[i-1] = P->student[i];
- }
-
- //删除成功
- P->size--;
- printf("删除成功\n");
- return 0;
- }
-
- //学生信息去重
-
- //按成绩降序排序
- void Sort_Stu(class_ptr P)
- {
- //判断合法性
- if(NULL == P || Full(P))
- {
- printf("error\n");
- return;
- }
- printf("************对学生成绩进行排序***********\n");
- for(int i=1;i<P->size;i++)
- {
- for(int j=0;j<P->size;j++)
- {
- if(P->student[j].score < P->student[j+1].score)
- {
- //交换位置
- datatype temp = P->student[j];
- P->student[j] = P->student[j+1];
- P->student[j+1] = temp;
- }
- }
- }
- //排序成功
- printf("排序成功\n");
- }
-
- //输出成绩最值学生信息
- void Print_Best(class_ptr P)
- {
- //判断是否成功申请内存
- if(NULL == P)
- {
- printf("error\n");
- return ;
- }
-
- //定义最值学生容器
- datatype stu_max;
- datatype stu_min;
-
- //定义最值分数容器
- double max_score = 0;
- double min_socre = 0;
-
- //将第一个学生当做最值
- stu_max = *P->student;
- stu_min = *P->student;
- max_score = P->student[0].score;
- min_socre = P->student[0].score;
-
- //循环比较刷新最值
- for(int i=1;i<P->size;i++)
- {
- if(P->student[i].score > max_score)
- {
- max_score = P->student[i].score;
- stu_max = P->student[i];
- }
- if(P->student[i].score < min_socre)
- {
- min_socre = P->student[i].score;
- stu_min = P->student[i];
- }
- }
- //输出成绩最值学生信息
- printf("************成绩最值学生信息************\n");
- printf("成绩最高学生信息:\n");
- printf("姓名\t年龄\t成绩\n\n");
- printf("%s\t%d\t%lf\n",\
- stu_max.name,stu_max.age,stu_max.score);
-
- printf("成绩最低学生信息:\n");
- printf("姓名\t年龄\t成绩\n\n");
- printf("%s\t%d\t%lf\n",\
- stu_min.name,stu_min.age,stu_min.score);
- }
-
- //销毁班级容器
- void destroy(class_ptr P)
- {
- //释放内存
- if(P != NULL)
- {
- free(P);
- P = NULL;
- }
- }
- #include <myhead.h>
- #include "sys.h"
-
- int main(int argc, const char *argv[])
- {
- printf("\t\t************学生信息管理系统************\n");
- printf("\t\t=======1、 创建班级 =======\n");
- printf("\t\t=======2、 录入学生信息 =======\n");
- printf("\t\t=======3、 浏览学生信息 =======\n");
- printf("\t\t=======4、 查找学生信息 =======\n");
- printf("\t\t=======5、 修改学生信息 =======\n");
- printf("\t\t=======6、 删除学生信息 =======\n");
- printf("\t\t=======7、 学生成绩降序排序 =======\n");
- printf("\t\t=======8、 输出成绩最值学生信息 =======\n");
- printf("\t\t=======9、 销毁班级 =======\n");
- printf("\t\t=======0、 退出 =======\n");
- //菜单
- int menu =0;
- char value[20];
- //定义指针接收申请的班级结构体内存
- class_ptr P = NULL;
-
- do
- {
- printf("请输入选项>>>");
- scanf("%d",&menu);
- getchar();
-
- //多分支选择执行对应功能
- switch(menu)
- {
- case 1://创建班级
- //指针接收申请的班级结构体内存
- P =Create_Stu();
-
- break;
- case 2://录入学生信息
- Enter_Stu(P);
- break;
- case 3://浏览学生信息
- Print_Stu(P);
- break;
- case 4://查找学生信息
- {
- printf("请输入您需要查找的学生姓名:");
- scanf("%s",value);
- getchar();
- //按姓名查找学生位置
- int res4 = Search_name(P,value);
- //按位置输出学生信息
- Print_pos( P,res4);
- }
- break;
- case 5://修改学生信息
- {
- printf("请输入您需要修改的学生姓名:");
- scanf("%s",value);
- getchar();
- //按姓名查找学生位置
- int res5 = Search_name(P,value);
- //按位置修改学生新信息
- Update_pos(P,res5);
- }
- break;
-
- case 6://删除学生信息
- {
- printf("请输入您需要删除的学生姓名:");
- scanf("%s",value);
- getchar();
- //按姓名查找学生位置
- int res6 = Search_name(P,value);
- //按位置删除学生新信息
- Delete_pos(P,res6);
- }
- break;
- case 7://按成绩降序排序
- Sort_Stu(P);
- //输出排序后信息
- Print_Stu(P);
- break;
- case 8://输出成绩最值学生信息
- Print_Best(P);
- break;
- case 9://销毁班级容器
- destroy(P);
- P = NULL;
- printf("销毁成功\n");
- break;
- case 0://退出
- break;
- default:
- printf("输入错误,请重新输入\n");
- break;
- }
-
- } while(menu !=0);
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。