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

xiaoxiao2021-02-27  365

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; }
转载请注明原文地址: https://www.6miu.com/read-5730.html

最新回复(0)