#include "stdio.h" #define MAX_SIZE 11 #include "stdlib.h" #include "malloc.h" #include "string.h" typedef struct { int id; char name[10]; char sex; float math_score; float chinese_score; float other_score; char address[30]; char contact[20]; }Student; typedef struct { Student data[MAX_SIZE]; int last; }SeqList; int getNo(SeqList *SL) { int i ,ch=1,j; int no; while(1) { printf("请输入学号1000-9999:"); scanf("%d",&no); for(i=1;i<=SL->last;i++) { if(no==SL->data[i].id||no<1000||no>9999) { printf("输入错误或学号重复! ");ch=0;break; } else { ch=1; } } if(ch==1)return no; } } char getSex() { char sex; while(1) { fflush(stdin); printf("请输入性别(M或F):"); scanf("%c",&sex); if(sex=='M'||sex=='F'||sex=='m'||sex=='f') break; else printf("输入错误,您只能输入字符M(男)或者F(女)! "); } return sex; } float get_math(SeqList *SL) { float math; while(1) { printf("请输入数学成绩0-100:"); scanf("%f",&math); if(math>=0.0&&math<=100)break; printf("输入错误,请重新输入! "); } return math; } float get_chinese(SeqList *SL) { float math; while(1) { printf("请输入语文成绩0-100:"); scanf("%f",&math); if(math>=0.0&&math<=100)break; printf("输入错误,请重新输入! "); } return math; } float get_other(SeqList *SL) { float math; while(1) { printf("请输入其他成绩0-100:"); scanf("%f",&math); if(math>=0.0&&math<=100)break; printf("输入错误,请重新输入! "); } return math; } Student getStudent(SeqList *SL) // 顺序表的输入 { Student s1; s1.id = getNo(SL); printf("请输入姓名:"); scanf("%s",s1.name); s1.math_score=get_math(SL); s1.chinese_score=get_chinese(SL); s1.other_score=get_other(SL); s1.sex = getSex(); printf("请输入地址:"); scanf("%s",s1.address); printf("请输入联系方式:"); scanf("%s",s1.contact); return s1; } menu() //菜单 { system("cls"); printf("******************************************************************************* "); printf("***********************************学生管理************************************ "); printf("******************************************************************************* "); printf(" 1.输入学生信息 "); printf(" 2.输出学生信息 "); printf(" 3.删除学生信息 "); printf(" 4.插入学生信息 "); printf(" 5.查找学生信息 "); printf(" 6.修改学生信息 "); printf(" 7.保存学生信息 "); printf(" 8.退出学生信息 "); } SeqList * init_SeqList() //初始化 { SeqList *L; L = (SeqList *) malloc (sizeof(SeqList));//申请空间 L ->last =0; return L; } int isFull(SeqList *SL)//是否为满 { if(SL->last == MAX_SIZE) { printf("满了,加不了啦! "); return 1; } return 0; } add_SeqList(SeqList *SL)//输入学生信息 { if(isFull(SL)) { printf("抱歉没有空间添加!"); return ; } else { SL->last++; SL->data[SL->last]=getStudent(SL); printf("添加成功"); } } show_SeqList(SeqList *SL)//输出学生信息 { int i; Student *L; char s[4],ch_[30]; if(SL->last==0) //是否为空 { printf("没有数据!"); return; } else for(i=1;i<=SL->last;i++) { printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); } } delet_SeqList(SeqList *SL) // 删除学生信息 { int i,ch,id=0; char ch_; char ch_id[30]; printf(" 请输入您要删除方式: "); printf(" 1.学号删除: "); printf(" 2.姓名删除: "); printf(" 3.地址删除: "); printf(" 4.手机号删除: "); printf(" 5.返回 "); scanf("%d",&ch); if(ch==1) { printf("请输入您要删除信息的学号:"); scanf("%d",&ch); for(i=1;i<=SL->last;i++) { if(ch==SL->data[i].id) { system("cls"); fflush(stdin); printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); printf("确定删除y/n? "); scanf("%c",&ch_); if(ch_=='y'||ch_=='Y') { SL->data[i]=SL->data[i+1]; SL->last--; printf("删除成功!"); } id++; } } if(id==0)printf("没有该学生信息!"); } else if(ch==2) { printf("请输入您要删除信息的姓名:"); scanf("%s",ch_id); for(i=1;i<=SL->last;i++) { if(strcmp(ch_id,SL->data[i].name)==0) { system("cls"); fflush(stdin); printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); printf("确定删除y/n? "); scanf("%c",&ch_); if(ch_=='y'||ch_=='Y') { SL->data[i]=SL->data[i+1]; SL->last--; printf("删除成功!"); } id++; } } if(id==0)printf("没有该学生信息!"); } else if(ch==3) { printf("请输入您要删除信息的地址:"); scanf("%s",ch_id); for(i=1;i<=SL->last;i++) { if(strcmp(ch_id,SL->data[i].address)==0) { system("cls"); fflush(stdin); printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); printf("确定删除y/n? "); scanf("%c",&ch_); if(ch_=='y'||ch_=='Y') { SL->data[i]=SL->data[i+1]; SL->last--; printf("删除成功!"); } id++; } } if(id==0)printf("没有该学生信息!"); } else if(ch==4) { printf("请输入您要删除信息的手机号:"); scanf("%s",ch_id); for(i=1;i<=SL->last;i++) { if(strcmp(ch_id,SL->data[i].contact)==0) { system("cls"); fflush(stdin); printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); printf("确定删除y/n? "); scanf("%c",&ch_); if(ch_=='y'||ch_=='Y') { SL->data[i]=SL->data[i+1]; SL->last--; printf("删除成功!"); } id++; } } if(id==0)printf("没有该学生信息!"); } else { printf("按任意键返回");return; } return 1; } insert_SeqList(SeqList *SL,int i )//插入学生信息 { printf("输入你要插入的位置:"); scanf("%d",&i); int j; if(i<1||i>SL->last) { printf("插入的序号有错"); return 0;} for(j=i;j<SL->last;j++) SL->data[j+1]=SL->data[j]; SL->data[i]=getStudent(SL); printf("插入成功"); SL->last++; return 1; } find_SeqList(SeqList *SL) //查找学生信息 { int i,ch ,id=0; char ch_[10]; if(SL->last==0) { printf("没有数据!查找不了!"); return; } printf(" 请输入您要查找的学生的方式: "); printf(" 1.学号查找: "); printf(" 2.姓名查找: "); printf(" 3.地址查找: "); printf(" 4.手机号查找: "); printf(" 5.返回 "); scanf("%d",&ch); if(ch==1) { printf("请输入学号: "); scanf("%d",&ch); for(i=1;i<=SL->last;i++) if(ch==SL->data[i].id) { printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); id++; } if(id==0)printf("无法查到!"); } else if(ch==2) { printf("请输入姓名: "); scanf("%s",ch_); for(i=1;i<=SL->last;i++) if(strcmp(SL->data[i].name,ch_)==0) { printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); id++; } if(id==0)printf("无法查到!"); } else if(ch==3) { printf("请输入地址: "); scanf("%s",ch_); for(i=1;i<=SL->last;i++) if(strcmp(SL->data[i].address,ch_)==0) { printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); id++; } if(id==0)printf("无法查到!"); } else if(ch==4) { printf("请输入手机号: "); scanf("%s",ch_); for(i=1;i<=SL->last;i++) if(strcmp(SL->data[i].contact,ch_)==0) { printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); id++; } if(id==0)printf("无法查到!"); } else { printf("按任意键返回");return; } } isEmpty(SeqList *SL) { if(SL->last == 0) { printf("没有数据!"); return 1; } else return 0; } int opan_file(SeqList *SL) //读取学生信息 { FILE *fp; if((fp=fopen("student.txt","rb"))==NULL) { printf("打开文件失败! "); system("pause"); exit(1); } do { SL->last++; }while(fread(&SL->data[SL->last],sizeof(Student),1,fp)==1); SL->last--; fclose(fp); } int save_file(SeqList *SL) //保存学生信息 { FILE *fp; int i; if((fp=fopen("student.txt","wb"))==NULL) { printf("打开文件失败 "); exit(1); } for(i=1;i<=SL->last;i++) { if(fwrite(&SL->data[i],sizeof(Student),1,fp)) printf("第%d组信息保存成功 ",i); } fclose(fp); } amend(SeqList *SL) //修改学生信息 { Student s1; int no,i,d=0,flag,ch; char name[10],address[10],contact[10]; printf("请输入您要修改的学生信息学号:"); scanf("%d",&no) ; for(i=1;i<=SL->last;i++) if(no==SL->data[i].id) { system("cls"); printf(" 学号:%d 姓名:%s 性别:%c 数学分数:%.2f 语文分数:%.2f 其他分数:%.2f 地址:%s 联系方式%s ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact); d++; flag=i; } if(d==0) { printf("没有该学生信息!"); return 0; } printf(" 1.学号修改: "); printf(" 2.姓名修改: "); printf(" 3.地址修改: "); printf(" 4.手机号修改: "); printf(" 5.性别修改: "); printf(" 6.语文分数修改: "); printf(" 7.数学分数修改: "); printf(" 8.其他分数修改: "); printf(" 9.返回 "); printf(" 请输入您要修改的内容: "); scanf("%d",&ch); fflush(stdin); if(ch==1) { SL->data[flag].id=getNo(SL); printf("修改成功 ") ; } else if(ch==2) { printf("请输入姓名:"); scanf("%s",name); strcpy(SL->data[flag].name,name); printf("修改成功 ") ; } else if(ch==3) { printf("请输入地址:"); scanf("%s",address); strcpy(SL->data[flag].address,address); printf("修改成功 ") ; } else if(ch==4) { printf("请输入联系方式:"); scanf("%s",contact); strcpy(SL->data[flag].contact,contact); printf("修改成功 ") ; } else if(ch==5) { SL->data[flag].sex=getSex(); printf("修改成功 ") ; } else if(ch==6) { SL->data[flag].chinese_score=get_chinese(SL); printf("修改成功 ") ; } else if(ch==7) { SL->data[flag].math_score=get_math(SL); printf("修改成功 ") ; } else if(ch==8) { SL->data[flag].other_score=get_other(SL); printf("修改成功 ") ; } else { return 0; } } main() { SeqList *SL; int a,i; int id; SL=init_SeqList(); opan_file(SL); while(1) { menu(); scanf("%d",&a); if(a==1) { add_SeqList(SL); } else if(a==2) { show_SeqList(SL); } else if(a==3) { system("cls"); delet_SeqList(SL); } else if(a==4) { insert_SeqList(SL, i); } else if(a==5) { system("cls") ; find_SeqList(SL); } else if(a==6) { amend(SL); } else if(a==7) { save_file(SL); } else return 0; getch(); } }