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;
}