mian.c部分
#include "list.h" int main(int argc, const char *argv[]) { Plist L = create_list(); L->len=0; int command; while(1){ printf("\t\t简单学生管理系统\n"); printf("\t\t1.输入学生信息\n"); printf("\t\t2.输出学生信息\n"); printf("\t\t3.插入学生信息\n"); printf("\t\t4.删除学生信息\n"); printf("\t\t5.按位置查找学生信息\n"); printf("\t\t6.按姓名查找学生信息\n"); printf("\t\t7.去除重复学生信息\n"); printf("\t\t8.按学号进行排序\n"); printf("\t\t9.按学号查找学生,删除该学生\n"); printf("\t\t10.修改一名学生\n"); printf("\t\t11.退出系统\n"); printf("请输入需要执行的操作命令:"); scanf("%d",&command); switch(command){ case 1: input_stu(L); break; case 2: output_stu(L); break; case 3: insert_stu(L); break; case 4: delete_stu(L); break; case 5: find_pos(L); break; case 6: find_name(L); break; case 7: delete_repeat(L); break; case 8: bub_stu_id(L); break; case 9: find_id_delete(L); break; case 10: change_stu(L); break; case 11: return 0; default: return 0; } } free(L); L = NULL; return 0; }
list.c部分
#include "list.h" Plist create_list() { Plist L = malloc(sizeof(list)); if(NULL == L){ printf("创建失败\n"); return NULL; }else{ printf("创建成功\n"); return L; } } Stu input_one_stu(){ Stu s; printf("请输入学生信息学号:"); scanf("%d",&s.id); printf("请输入学生信息姓名:"); scanf("%s",s.name); printf("请输入学生信息性别:"); scanf("%s",s.sex); printf("请输入学生信息年龄:"); scanf("%d",&s.age); return s; } void input_stu(Plist L) { int n; printf("请输入你要输入的学生个数:"); scanf("%d",&n); for(int i=0;i<n;i++){ printf("请输入第%d位学生信息学号:",i+1); scanf("%d",&L->data[i].id); printf("请输入第%d位学生信息姓名:",i+1); scanf("%s",L->data[i].name); printf("请输入第%d位学生信息性别:",i+1); scanf("%s",L->data[i].sex); printf("请输入第%d位学生信息年龄:",i+1); scanf("%d",&L->data[i].age); printf("\n"); L->len++; } } int full(Plist L) { if(L->len==MAX){ return 1; } return 0; } int empty(Plist L) { if(L->len==0){ return 1; } return 0; } void output_stu(Plist L) { for(int i=0;i<L->len;i++){ printf("学号:%d 姓名:%s 性别:%s 年龄:%d\n",L->data[i].id,L->data[i].name,L->data[i].sex,L->data[i].age); } } int insert_stu(Plist L) { if(NULL==L||full(L)){ printf("插入失败\n"); return -1; } int pos; printf("请输入插入学生位置:"); scanf("%d",&pos); Stu s = input_one_stu(); for(int i=L->len;i>=pos-1;i--){ L->data[i] = L->data[i-1]; } L->data[pos-1] = s; L->len++; return 0; } int delete_stu(Plist L) { int pos; printf("请输入删除学生位置:"); scanf("%d",&pos); if(NULL==L||empty(L)||pos<1||pos>L->len){ printf("删除失败\n"); return -1; } for(int i=pos-1;i<=L->len-1;i++){ L->data[i]=L->data[i+1]; } L->len--; printf("删除成功\n"); return 0; } int delete_stu_noinput(Plist L,int pos) { if(NULL==L||empty(L)||pos<1||pos>L->len){ printf("删除失败\n"); return -1; } for(int i=pos-1;i<=L->len-1;i++){ L->data[i]=L->data[i+1]; } L->len--; printf("删除成功\n"); return 0; } int find_pos(Plist L) { int pos; printf("请输入查找学生位置:"); scanf("%d",&pos); if(pos>L->len||pos<1||L==NULL||empty(L)){ printf("查找失败\n"); return -1; } printf("查找成功\n学号:%d 姓名:%s 性别:%s 年龄:%d\n",L->data[pos-1].id,L->data[pos-1].name,L->data[pos-1].sex,L->data[pos-1].age); return 0; } int find_name(Plist L) { char name[20]; printf("请输入查找学生姓名:"); scanf("%s",name); for(int i=0;i<L->len;i++){ if(strcmp(name,L->data[i].name)==0){ printf("查找成功\n学号:%d 姓名:%s 性别:%s 年龄:%d\n",L->data[i].id,L->data[i].name,L->data[i].sex,L->data[i].age); return -1; } } printf("未查找到姓名为:%s的学生\n",name); return 0; } int delete_repeat(Plist L) { for(int i=0;i<L->len;i++){ for(int j=i+1;j<L->len;j++){ if(strcmp(L->data[i].name,L->data[j].name)==0){ delete_stu_noinput(L,j+1); j--; } } } return 0; } int bub_stu_id(Plist L) { Stu temp; for(int i=1;i<L->len;i++){ for(int j=0;j<L->len-i;j++){ if(L->data[j].id>L->data[j+1].id){ temp = L->data[j]; L->data[j] = L->data[j+1]; L->data[j+1] = temp; } } } return 0; } int find_id_delete(Plist L){ bub_stu_id(L); int id; printf("请输入查找学生id:"); scanf("%d",&id); int i=0,j=L->len-1,mid; while(i<=j){ mid = (i+j)/2; if(id>L->data[mid].id){ i = mid+1; }else if(id<L->data[mid].id){ j = mid-1; }else{ printf("查找成功\n学号:%d 姓名:%s 性别:%s 年龄:%d\n",L->data[mid].id,L->data[mid].name,L->data[mid].sex,L->data[mid].age); delete_stu_noinput(L,mid+1); return -1; } } printf("查找失败\n"); return 0; } int change_stu(Plist L) { int pos; printf("请输入要修改学生的位置:"); scanf("%d",&pos); if(empty(L)||pos<1||pos>L->len){ printf("修改失败\n"); return -1; } L->data[pos-1] = input_one_stu(); printf("修改成功\n"); return 0; }
list.h部分
#ifndef _LIST_ #define _LIST_ #include <myhead.h> #define MAX 30 typedef struct { int id; char name[20]; char sex[5]; int age; }Stu; typedef struct { Stu data[MAX]; int len; }list,*Plist; Plist create_list(); Stu input_one_stu(); int full(Plist); int empty(Plist); void input_stu(Plist); void output_stu(Plist); int insert_stu(Plist); int delete_stu(Plist); int find_pos(Plist); int find_name(Plist); int delete_stu_noinput(Plist,int); int delete_repeat(Plist); int bub_stu_id(Plist); int find_id_delete(Plist); int change_stu(Plist); #endif