您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 学生信息处理系统雏形(链表)
//学生信息处理系统完善版能完成数据的输入,输出,插入,删除排序,修改等功能(链表实现)2012.7.18#includestdio.h#includestdlib.h#includestring.h#includemalloc.hintp_zfc(charzfc_no[],int*shuzi_P);//判断是否为数值型字符,如不是返0,否则转换为十进制,并返回1;voidchuli_p_zfc(charcansu[],int*p_shuzi);//判断字符串函数返回值处理函数structstudent*creat_list(void);//创建链表voidtraverse_list(structstudent*phead);//遍历链表intis_temp(structstudent*phead);//判断链表是否为空intlong_list(structstudent*phead);//判断链表的长度voidno_sort_list(structstudent*phead,intlen);//链表根据学号排序voidchengji_sort_list(structstudent*phead,intlen);//链表根据学号排序voidinsert_list(structstudent*phead,intinsert_location);//插入链表函数voiddelete_list(structstudent*phead,intdelete_location);//删除链表函数voidchange_list(structstudent*phead,intchang_location);//修改链表内容//定义结构体structstudent{intno;charname[20];///数据域intchengji;structstudent*pnext;};//主函数intmain(void){charxuan;//主菜单选项变量intjishuqi=0;//主菜单中a选项执行次数的统计变量intkong;//链表是否为空变量intshuzi;//输入的是字符串,返回的是正整数char_len[20];//链表长度(为字符串是未确定值)变量intlen;//链表长度(为正整数是确定值)变量char_insert_location[20];//插入链表节点位置(为字符串是未确定值)变量intinsert_location;//插入链表节点位置(为正整数是确定值)变量char_delete_location[20];//删除链表节点位置(为字符串是未确定值)变量intdelete_location;//删除链表节点位置(为正整数是确定值)变量char_change_location[20];//修改链表节点位置(为字符串是未确定值)变量intchange_location;//修改链表节点位置(为正整数是确定值)变量structstudent*phead;//头指针变量printf(欢迎使用本链表操作系统!\n);while(1){while(1){printf(a:建立链表\n);printf(b:显示链表长度\n);printf(c:插入\n);printf(d:删除\n);printf(e:修改\n);printf((f:显示\n);printf((g:按成绩排序\n);printf((h:按学号排序\n);printf((i:继续\n);printf((j:退出\n);printf(请选择选项:);scanf(%c,&xuan);fflush(stdin);if(xuan!='a'&&xuan!='b'&&xuan!='c'&&xuan!='d'&&xuan!='e'&&xuan!='f'&&xuan!='g'&&xuan!='h'&&xuan!='i'&&xuan!='j'){printf(输入错误,请重选!\n);continue;}elsebreak;}switch(xuan){case'a':if(jishuqi1){printf(请创建链表!\n);printf(请输入你想建立的链表结点个数:\n);chuli_p_zfc(_len,&shuzi);len=shuzi;phead=creat_list(len);printf(你创建的链表如下:\n);traverse_list(phead);jishuqi++;break;}else{printf(不能再操作此项!\n);break;}case'b':printf(显示链表长度!\n);len=long_list(phead);printf(现在链表的长度为:%d\n,len);break;case'c':printf(请插入!\n);printf(请输入位置:\n);chuli_p_zfc(_insert_location,&shuzi);insert_location=shuzi;insert_list(phead,insert_location);printf(插入后的链表如下:\n);traverse_list(phead);break;case'd':printf(请删除!\n);printf(请输入位置:\n);chuli_p_zfc(_delete_location,&shuzi);delete_location=shuzi;delete_list(phead,delete_location);printf(删除后的链表如下:\n);traverse_list(phead);break;case'e':printf(请修改!\n);printf(请输入位置:\n);chuli_p_zfc(_change_location,&shuzi);change_location=shuzi;change_list(phead,change_location);printf(修改后的链表如下:\n);traverse_list(phead);break;case'f':printf(你想显示的链表如下:\n);traverse_list(phead);break;case'g':printf(按成绩排序:\n\n);len=long_list(phead);chengji_sort_list(phead,len);printf(按成绩排序后的链表如下:\n);traverse_list(phead);break;case'h':printf(按学号排序:\n\n);len=long_list(phead);no_sort_list(phead,len);printf(按学号排序后的链表如下:\n);traverse_list(phead);break;case'i':break;case'j':break;}if(xuan=='j')break;}return0;}//判断是否为数值型字符,如不是返0,否则转换为十进制,并返回1;intp_zfc(charzfc_no[],int*shuzi_P){intt,i;for(i=0;zfc_no[i]!='\0';i++)//筛选if(zfc_no[i]48||zfc_no[i]57)return0;//如果是非数值型字符串,则退出该函数*shuzi_P=0;for(i=0;zfc_no[i]!='\0';i++){switch(zfc_no[i])//还原为十进制数{case48:t=0;break;case49:t=1;break;case50:t=2;break;case51:t=3;break;case52:t=4;break;case53:t=5;break;case54:t=6;break;case55:t=7;break;case56:t=8;break;case57:t=9;break;}*shuzi_P=*shuzi_P*10+t;}return1;}//判断字符串函数返回值处理函数voidchuli_p_zfc(charcansu[],int*p_shuzi){while(1){scanf(%s,cansu);if(p_zfc(cansu,p_shuzi)==0)//判断输入值是否为数值型字符串函数{printf(输入错误,请输入整数!\n);continue;}if(*p_shuzi==0){printf(请输入正整数!\n);continue;}elsebreak;}return;}//创建链表函数structstudent*creat_list(intlen){inti;structstudent*phead,*pnew,*p1;//定义头指针变量,首指针变量,p1变量,尾指针变量phead=(structstudent*)malloc(sizeof(structstudent));//创建一个头结点,但不存任何数据,仅仅起引导作用,用户是不知道有这个节点的,只有程序员知道if(NULL==phead){printf(内存忙!\n);exit(-1);//如果申请失败,终止整个程序}p1=phead;//使p1和phead同时指向头结点p1-pnext=NULL;for(i=0;ilen;i++){pnew=(structstudent*)malloc(sizeof(structstudent));//创建一个头结点,但不存任何数据if(NULL==pnew){printf(内存忙!\n);exit(-1);//如果申请失败,终止整个程序}printf(第%d个节点建立好了,请输入原始信息!\n,i+1);printf(学号:);scanf(%d,&pnew-no);fflush(stdin);printf(姓名:);scanf(%s,pnew-name);fflush(stdin);printf(成绩:);scanf(%d,&pnew-chengji);printf(\n);fflush(stdin);p1-pnext=pnew;//挂接到前一个节点p1=pnew;//改变p1的指向p1-pnext=NULL;//把p1-pnext的指定为空地址}returnphead;}//遍历链表函数voidtraverse_list(structstudent*phead){structstudent*p;p=phead-pnext;while(NULL!=p){printf(学号:%d\n姓名:%s\n成绩:%d\n\n,p-no,p-name,p-chengji);p=p-pnext;}printf(\n);return;}//判断链表是否为空函数intis_temp(structstudent*phead){if(phead-pnext==NULL)return1;elsereturn0;}//判断链表的长度函数intlong_list(structstudent*phead){intlen;structstudent*p;len=0;p=phead-pnext;while(p!=NULL){len++;p=p-pnext;}returnlen;}//根据学号从小到大排序voidno_sort_list(structstudent*phead,intlen){inti,j,t1;chart2[20];structstudent*p,*q;for(i=0,p=phead-pnext;ilen-1;i++,p=p-pnext)for(j=i+1,q=p-pnext;jlen;j++,q=q-pnext)if(p-noq-no){t1=p-no;p-no=q-no;//交换学号数据q-no=t1;strcpy(t2,p-name);strcpy(p-name,q-name);//交换姓名数据strcpy(q-name,t2);t1=p-chengji;p-chengji=q-cheng
本文标题:学生信息处理系统雏形(链表)
链接地址:https://www.777doc.com/doc-3663649 .html