300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 学生管理系统(c语言) 数据结构(c语言)之学生信息管理系统

学生管理系统(c语言) 数据结构(c语言)之学生信息管理系统

时间:2023-03-19 12:36:42

相关推荐

学生管理系统(c语言) 数据结构(c语言)之学生信息管理系统

1 #include

2 #include//动态存储分配函数头文件

3 #include//包含数学函数的文件

4 #include//一个和字符串处理相关的头文件

5 #include//包含用于和宏指令的作用声明与螺纹和过程一起使用的C标头文件

6 #define ERROR 0 //宏定义

7 #define OK 1

8 #define over -2

9 #define ListInitSize 20

10 #define ListIncrement 5

11 #define Namelen 8

12 #define Majorlen 20

13 #define INIT_N 3

14 typedef int Status; //自定义类型语句 Status i 等价于 int i

15 typedef charStatusC;16

17 typedef struct{18 StatusC number[10]; //学号:081330385

19 StatusC name[Namelen+1]; //姓名:郭靖

20 StatusC gender; //性别:男

21 StatusC telephone[12]; //电话:15890377853

22 StatusC qqNumber[13]; //QQ:485284320

23 StatusC major[Majorlen+1];//专业:计算机科学与技术

24

25 }Student;//类型为学生

26

27 typedef struct{28

29 Student *elem; //存储空间的基址

30 Status length; //当前长度

31 Status listsize; //当前分配的存储容量(以sizeof(Studnet)为单位)

32 }Sqlist;33

34 //信息初始化,构造一个空的线性表

35 Status InitList(Sqlist &l){36

37 l.elem=(Student *)malloc(ListInitSize*sizeof(Student));38 //申请LIST_INIT_SIZE个大小为整型(Student)字节的空间,39 //把空间指针给L.elem

40 if(!l.elem)exit(over);41 //判断l中的数据成员elem是否为0,为0即执行if下面语句

42 l.length=0;43 //赋值

44 l.listsize=ListInitSize;45 returnOK;46 }47

48 //插入记录

49 Status ListInsert(Sqlist &l,Status i,Student s){50

51 Student *newbase;52 if(i<1||i>l.length+1)53 return ERROR;//i值不合法

54 if(l.length>=l.listsize)//当前存储空间已经满了,增加分配空间

55 {56 newbase=(Student*)realloc(l.elem,(57 ListInitSize+ListIncrement)*(sizeof(Student)));58 /*

59 先释放原来L.elem所指内存区域,并按照60 (LIST_INIT_SIZE+ListIncrement)*sizeof(Student)61 的大小重新分配空间其中ListIncrement为20,62 同时将原有数据从头到尾拷贝到新分配的内存区域,63 并返回该内存区域的首地址。即重新分配存储器块。64 */

65 if(!newbase)exit(over);66 //判断newbase是否为0,为0即执行if下面语句

67 l.elem=newbase;68 //赋值

69 l.listsize+=ListIncrement;70 }71 for(Status j=l.length;j>=i;j--)72 l.elem[j]=l.elem[j-1];73 //赋值

74 l.elem[i-1]=s;75 l.length++;76 returnOK;77 }78

79 //打印输出线性表中的信息

80 void print(Sqlist &l){81

82 if(l.length==0)83 printf("空表,无任何记录!");84 printf("学号 姓名 性别 手机号 QQ 专业");85 printf("******************************");86

87 for(Status i=0;i

89 printf("%-10s %-8s",l.elem[i].number,l.elem[i].name);90 //输出学好 姓名

91 if(l.elem[i].gender=='m')printf("男");92 //判断语句

93 else printf("女");94 printf("%14s %9s %10s",l.elem[i].telephone,l.elem[i].qqNumber,l.elem[i].major);95 //输出电话号码 qq号码 专业

96 printf("");97 }98 printf("------------------------------");99 }100

101 //打印输出线性表中指定学生的信息

102 voidprint_single(Student s){103

104 printf("学号 姓名 性别 手机号 QQ 专业");105 printf("******************************");106 printf("%-10s %-8s",s.number,s.name);107 //输出学好 姓名

108 if(s.gender=='m')printf("男");109 else printf("女");110 printf("%14s %9s %10s",s.telephone,s.qqNumber,s.major);111 //输出电话号码 qq号码 专业

112 printf("");113 printf("------------------------------");114 }115

116 //接受键盘输入信息

117 void ScanIn(Sqlist &l){118

119 StatusC a[2];120 Status i;121 printf("您选择插入一条学生记录");122 do{123 Student s;124 printf("请输入学号:");125 scanf("%s",s.number);126 printf("请输入姓名(<=%d个字符):",Namelen);127 scanf("%s",s.name);128

129 printf("请输入电话号码:");130 scanf("%s",s.telephone);131 printf("请输入QQ号:");132 scanf("%s",s.qqNumber);133 printf("请输入专业:");134 scanf("%s",s.major);135 printf("请输入性别:(m:男,f:女)");136 scanf("%*c%c",&s.gender);137 printf("请输入你要插入的位置(1<=i<=%d):",l.length+1);138 scanf("%d",&i);139 ListInsert(l,i,s);140 printf("您想继续插入记录吗?(y/n)");141 scanf("%s",a);142

143 }while(strcmp(a,"y")==0||strcmp(a,"Y")==0);144 //调用strcmp函数

145 }146

147 //删除通讯中第i条记录

148 Status ListDelete(Sqlist &l,inti,Student s){149

150 Status j;151 if(i<1||i>l.length)returnERROR;152 //判断

153 else{154

155 s=l.elem[i-1];156 for(j=i;j<=l.length;j++)l.elem[j-1]=l.elem[j];157 l.length--;158 returnOK;159 }160 }161

162 //按照升序排列

163 void SortorderAscend(Sqlist &l){164

165 system("cls");//清空前面的信息之输出下面信息

166 Student s;167 for(Status i=0;i

170 if(strcmp(l.elem[j].number,l.elem[j+1].number)>0){171 //strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符;172 //用来比较字符串(区分大小写)

173 s=l.elem[j];174 l.elem[j]=l.elem[j+1];175 l.elem[j+1]=s;176 }177 }178 printf("*****按照升序排序成功!******");179 }180

181 //判断姓名是否相同

182 Status EqualName(Student s1,Student s2){183

184 if(strcmp(s1.name,s2.name))returnERROR;185 //比较两个字符串是否相同

186 else returnOK;187 }188

189 //定位某个元素

190 int LocateElem(Sqlist l,Student s,Status(*compare)(Student,Student)) {191

192 Status i=1;193 Student *p=l.elem;194 while(i<=l.length&&!compare(*p++,s))i++;195 if(i<=l.length)196 returni;197 //定位元素的位置

198 else

199 return 0;200 }201

202 //按照姓名查找

203 void searchName(Sqlist l,Status(*equal)(Student,Student)){204

205 system("cls");//清空前面的信息之输出下面信息

206 Student s;207 Status j;208 StatusC a[2];209 do{210 printf("请输入你要查找的学生的姓名:");211 scanf("%s",s.name);212 j=LocateElem(l,s,equal);213 if(!j)printf("没有查找到你所要查找的学生记录!");214 else print_single(l.elem[j-1]);215 printf("您想继续查找吗?(y/n)");216 scanf("%s",a);217

218 }while(strcmp(a,"y")==0||strcmp(a,"Y")==0);219 }220

221 //修改姓名

222 void ModifyName(Sqlist &l,Status(*equal)(Student,Student)){223

224 system("cls");//清空前面的信息之输出下面信息

225 Student s;226 Status j;227 StatusC number_new[10],name_new[Namelen+1],gender_new,228 telephone_new[12],qqNumber_new[13],major_new[Majorlen+1];229 StatusC a[2];230 do{231 printf("请输入你要更改的学生的姓名:");232 scanf("%s",s.name);233 j=LocateElem(l,s,equal);234 if(!j)printf("没有查找到你所要查找的学生记录!");235 else{236

237 print_single(l.elem[j-1]);238 Status isOrNo=1;239 printf("修改通讯录:1 学号,2 姓名,3 性别,4 电话,5 QQ号,6 专业, 0 取消") ;240 while(isOrNo){241

242 printf("--------------------------");243 printf("请选择需要修改的属性序号:");244 scanf("%d",&isOrNo);245 switch(isOrNo){246

247 case 1:248 printf("请输入更改后的学号:");249 scanf("%s",number_new);250 strcpy(l.elem[j-1].number,number_new);251 break;252 case 2:253 printf("请输入更改后的姓名:");254 scanf("%s",name_new);255 strcpy(l.elem[j-1].name,name_new);256 break;257 case 3:258 printf("请输入更改后的性别:");259 scanf("%*c%c",&l.elem[j-1].gender);260 break;261 case 4:262 printf("请输入更改后的电话:");263 scanf("%s",telephone_new);264 strcpy(l.elem[j-1].telephone,telephone_new);265 break;266 case 5:267 printf("请输入更改后的QQ号:");268 scanf("%s",qqNumber_new);269 strcpy(l.elem[j-1].qqNumber,qqNumber_new);270 break;271 case 6:272 printf("请输入更改后的专业:");273 scanf("%s",major_new);274 strcpy(l.elem[j-1].major,major_new);275 break;276

277 }278 }279 printf("****更改后该条记录变为****");280 print_single(l.elem[j-1]);281 }282 printf("您想继续修改吗?(y/n)");283 scanf("%s",a);284 }while(strcmp(a,"y")==0||strcmp(a,"Y")==0);285 }286

287 //主菜单

288 voidmenu(){289

290 system("cls");//清空前面的信息之输出下面信息

291 printf("*********************");292 printf("**欢迎使用学生通讯录管理系统**");293 printf("*********************");294 printf("**请选择如下操作,输入序号**");295 printf("0:退出系统");296 printf("1:将初始学生记录插入线性表");297 printf("2:显示线性表中所有内容");298 printf("3:向线性表中增加一条记录");299 printf("4:从线性表中删除一条记录");300 printf("5:按照姓名修改一条记录");301 printf("6:按照姓名查找一条记录");302 printf("7:按照学号升序排列通讯录");303 printf("*********************");304 printf("您想进行什么操作,请选择");305

306 }307

308 //主函数

309 intmain(){310

311 Sqlist l;312 Status i,select; //select 变量标记用户的选择

313 if(InitList(l)!=OK)printf("线性表初始化失败!");314 Student s[INIT_N]={{"081404327","马东",'m',"13729947569","87384747" ,"机械工程"},315 {"081404527","李东",'m',"13729985469","84786747" ,"软件工程"},316 {"081435797","马西",'f',"12329947569","84735777" ,"通讯工程"}};317 menu();318 scanf("%d",&select);319 while(select){320 switch(select){321 case 1: //初始化数据

322 system("cls");//清空前面的信息之输出下面信息

323 for(i=0;i

325 if(ListInsert(l,i+1,s[i])!=OK)326 printf("初始化数据失败!");327

328 }329 if(i==INIT_N)printf("初始化数据成功");330 print(l);331 printf("输入0:退出,输入11:返回主菜单");332 break;333 case 2://显示线性表中的记录

334 system("cls");//清空前面的信息之输出下面信息

335 print(l);336 printf("输入0:退出,输入11:返回主菜单");337 break;338 case 3://接受键盘输入,并把记录插入到线性表中

339 system("cls");//清空前面的信息之输出下面信息

340 ScanIn(l);341 system("cls");//清空前面的信息之输出下面信息

342 print(l);343 printf("输入0:退出,输入11:返回主菜单");344 break;345 case 4://删除通讯录中某条信息

346 system("cls");//清空前面的信息之输出下面信息

347 Student *s2=l.elem;348 print(l);349 printf("您想删除第几条通讯录1~%d:",l.length);350 intk;351 scanf("%d",&k);352 Student de_s;353 system("cls");//清空前面的信息之输出下面信息

354 if(ListDelete(l,k,de_s)==OK){355 print(l);356 printf("%-6s 已经删除成功!",de_s.name);357 }358 printf("输入0:退出,输入11:返回主菜单");359 break;360 case 5://按照姓名修改一条记录

361 ModifyName(l,EqualName);362 printf("输入0:退出,输入11:返回主菜单");363 break;364 case 6://按照姓名查找记录

365 searchName(l,EqualName);366 printf("输入0:退出,输入11:返回主菜单");367 break;368 case 7://按照学好升序排列

369 system("cls");//清空前面的信息之输出下面信息

370 SortorderAscend(l);371 print(l);372 printf("输入0:退出,输入11:返回主菜单");373 break;374 case 11://返回主菜单

375 menu();376 break;377 }378 scanf("%d",&select);379 }380 return 0;381

382

383 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。