C语言编写班级花名册(顺序表版)

来源:互联网 发布:企业招商模板 知乎 编辑:程序博客网 时间:2024/05/03 18:24

C语言编写班级花名册(顺序表版)

需求 :利用顺序表设计班级花名册
日期:2017.3.26 
以下是代码:
#include<stdio.h>#include<stdlib.h>// 调用malloc 函数 #include<conio.h>#include<string.h>typedef struct Student{// 定义学生结构体 char name[9];// 姓名char num[20];//学号char sex[3];//性别char grade[6];//成绩char tel_num[20];//联系电话 } *stu; typedef struct Roster{// 定义花名册结构体 int len; // 现有元素个数 int maxnum;// 最大元素个数 struct Student *element;// 指向Student的指针变量 }*prst;// 定义全局变量prst seqlist = NULL;int MAX = 0; // 最大元素个数 /********变量声明****/prst CreatSeqList(int m);// 创建空表 void menu();// 菜单界面 prst AddStu(prst plink);// 添加学生 void ShowAll(prst plink);// 显示全部学生信息 prst DelStu(prst plink, char *num);// 删除学生 void SearchStu(prst plink, char *num);// 查找单个学生信息 prst ModStu(prst plink, char *num); // 修改学生信息 void SortStu(prst plink);// 按成绩排序 void  FreeSeqlist(prst plink); // 释放内存 /*********声明结束*******/ /*************下面开始写 菜单界面 函数*************/int main(void){int choice;char num[20] = {0};printf("请输入最大学生人数:");scanf("%d", &MAX);seqlist = CreatSeqList(MAX);while(1){menu();printf("\n请选择:");scanf("%d",&choice);//读入选择if(choice<1||choice>7){printf("\n\n键入数值无效!重新输入!\n");} else{switch(choice){case 1:seqlist = AddStu(seqlist);// 添加学生  getch();  break; case 2:printf("请输入该学生学号:");// 修改学生 scanf("%s", num);seqlist = ModStu(seqlist, num);                getch();break;case 3: printf("请输入该学生学号:");// 删除学生 scanf("%s", num); getch();seqlist = DelStu(seqlist, num);break;case 4: printf("请输入该学生学号:");// 寻找学生 scanf("%s", num);getch();SearchStu(seqlist, num); break;case 5: SortStu(seqlist); // 按照成绩排序 getch();break;case 6: ShowAll(seqlist);getch();break;   case 7: FreeSeqlist(seqlist);printf("按任意键退出...");//退出系统 getch();exit(0);break;}}}return 0;}/*************下面开始写 菜单界面 函数*************/void menu(){printf("\n");printf("\t\t      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");printf("\t\t     ☆                                    ☆\n");printf("\t\t    ☆           班 级 花 名 册             ☆\n");printf("\t\t   ☆                                        ☆\n");printf("\t\t  ☆    1、增加学生信息2、修改学生信息       ☆\n");printf("\t\t ☆     3、删除学生信息4、查找学生信息        ☆\n");printf("\t\t ☆     5、按照成绩排序6、显示全部            ☆\n");printf("\t\t  ☆    7、退出系统                           ☆\n");printf("\t\t   ☆                                        ☆\n");printf("\t\t    ☆                                      ☆\n");printf("\t\t     ☆                                    ☆\n");printf("\t\t      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");}/**************创建空顺序表 里面最多有m个元素 **********/ prst CreatSeqList(int m){ prst plink = (prst)malloc(sizeof(struct Roster));if(plink != NULL){plink->element = (Student*)malloc( sizeof(Student) *m);if(plink->element){//plink->maxnum = MAX;plink->len = 0;//printf("%d",plink->element);return plink;}else free(plink);}printf("内存不足,顺序表创建失败!\n");return NULL;}/*********下面写 添加学生信息 函数**********/prst AddStu(prst plink){int q;for(q = 0; q < plink->len; q++);//printf("%d", q);printf("请按下面的提示进行添加\n");printf("姓名\t学号\t\t性别\t成绩\t联系电话\n\n");scanf("%s%s%s%s%s", plink->element[q].name, plink->element[q].num, plink->element[q].sex,plink->element[q].grade, plink->element[q].tel_num);    plink->len = plink->len+1;      printf("\n添加成功!\n");   //       //printf("个数=%d", plink->len);      return plink;} /**********下面写 显示全部信息 函数************/void ShowAll(prst plink){int p = 0; printf("姓名\t学号\t\t性别\t成绩\t联系电话\n\n");while(p < plink->len){printf("%s\t%s\t%s\t%s\t%s\n", plink->element[p].name, plink->element[p].num, plink->element[p].sex,plink->element[p].grade, plink->element[p].tel_num);p++;}return;}/**************下面写 根据学号删除学生信息 函数***********/prst DelStu(prst plink, char *num){int p = 0, q = 0, flag = 0;while(p < plink->len){if(strcmp(plink->element[p].num, num) == 0){for( q = p; q < plink->len-1; q++){plink->element[q] = plink->element[q+1]; }//plink->element[q+1] = NULL;// 将指针所指的最后一个元素赋空 plink->len = plink->len-1;flag = 1;printf("\n删除成功\n");}p++;}if(flag == 0)printf("没有找到该学生,请检查学号是否正确!"); return plink;}/*********下面写 按学号查找单个学生信息 函数************/void SearchStu(prst plink, char *num){int p = 0, flag = 0;while(p < plink->len){if(strcmp(plink->element[p].num, num) == 0){printf("姓名\t学号\t\t性别\t成绩\t联系电话\n\n");printf("%s\t%s\t%s\t%s\t%s\n", plink->element[p].name, plink->element[p].num, plink->element[p].sex,plink->element[p].grade, plink->element[p].tel_num);flag = 1;}p++;}if(flag == 0)printf("没有找到该学生,请检查学号是否正确!"); return;}/**********下面写 修改学生信息 函数*********/prst ModStu(prst plink, char *num){int p = 0, flag = 0;while(p < plink->len){if(strcmp(plink->element[p].num, num) == 0){printf("请按下面的提示进行修改\n");printf("姓名\t学号\t\t性别\t成绩\t联系电话\n\n");scanf("%s\t%s\t%s\t%s\t%s\n", plink->element[p].name, plink->element[p].num, plink->element[p].sex,plink->element[p].grade, plink->element[p].tel_num);printf("\n修改成功!\n");flag = 1;}p++;}if(flag == 0)printf("没有找到该学生,请检查学号是否正确!"); return plink;}/******x下面写 按照成绩进行排序 函数******/void SortStu(prst plink){Student stemp;for(int i = 0; i < plink->len; i++){for(int j = 0; j < plink->len-1; j++){if(strcmp(plink->element[i].num, plink->element[j].num) > 0){stemp = plink->element[i];plink->element[i] = plink->element[j];plink->element[j] = stemp;}}}printf("排序后结果如下:\n");ShowAll(plink);}/**********内存是要释放滴*****/void  FreeSeqlist(prst plink){int p = 0; while(p < MAX){free(&plink->element[p]);p++;}free(plink);return;}


0 0