学生信息处理系统雏形(链表)_第1页
学生信息处理系统雏形(链表)_第2页
学生信息处理系统雏形(链表)_第3页
学生信息处理系统雏形(链表)_第4页
学生信息处理系统雏形(链表)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/学生信息处理系统完善版 能完成数据的输入,输出,插入,删除 排序,修改等功能 (链表实现) 2012.7.18#include#include#include#includeint p_zfc(char zfc_no, int *shuzi_P);/判断是否为数值型字符,如不是返0,否则转换为十进制,并返回1;void chuli_p_zfc(char cansu, int *p_shuzi);/判断字符串函数返回值处理函数struct student* creat_list(void); /创建链表void traverse_list(struct student *phead); /遍历

2、链表int is_temp(struct student *phead); /判断链表是否为空int long_list(struct student *phead); /判断链表的长度void no_sort_list(struct student *phead, int len); /链表根据学号排序void chengji_sort_list(struct student *phead, int len ); /链表根据学号排序void insert_list(struct student *phead, int insert_location); /插入链表函数void delete_

3、list(struct student *phead, int delete_location) ; /删除链表函数void change_list(struct student *phead, int chang_location); /修改链表内容/定义结构体struct student int no; char name20; / 数据域 int chengji; struct student * pnext;/主函数int main(void) char xuan; /主菜单选项变量 int jishuqi = 0; /主菜单中a选项执行次数的统计变量 int kong; /链表是否为

4、空变量 int shuzi; /输入的是字符串,返回的是正整数 char _len20; / 链表长度(为字符串是未确定值)变量 int len; / 链表长度(为正整数是确定值)变量 char _insert_location20; /插入链表节点位置(为字符串是未确定值)变量 int insert_location; /插入链表节点位置(为正整数是确定值)变量 char _delete_location20; /删除链表节点位置(为字符串是未确定值)变量 int delete_location; /删除链表节点位置(为正整数是确定值)变量 char _change_location20;

5、/修改链表节点位置(为字符串是未确定值)变量 int change_location; /修改链表节点位置(为正整数是确定值)变量 struct student *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

6、);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(jishuqi 1)printf(请创建链表!n); printf(请输入你想建立的链表结点个数:n); chuli_p_zfc( _len, &s

7、huzi); len = shuzi;phead = creat_list(len);printf( 你创建的链表如下:n);traverse_list(phead);jishuqi+;break;elseprintf( 不能再操作此项!n); break; case b: printf(显示链表长度!n); len = long_list(phead);printf( 现在链表的长度为:%dn,len);break; case c: printf(请插入!n);printf(请输入位置:n); chuli_p_zfc( _insert_location, &shuzi);insert_loc

8、ation = 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:pr

9、intf(请修改!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(按成绩排序:nn); len = long_list(phead); chengji_sort_l

10、ist(phead,len); printf( 按成绩排序后的链表如下:n); traverse_list(phead); break; case h: printf(按学号排序:nn); 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; return 0;/判断是否为数值型字符,如不是返0,否则转换为十进制,并返回1; int p_zfc(c

11、har zfc_no, int *shuzi_P) int t,i; for(i=0; zfc_noi!=0; i+) /筛选 if(zfc_noi57) return 0; /如果是非数值型字符串,则退出该函数 *shuzi_P = 0; for(i=0; zfc_noi!=0; i+) switch(zfc_noi) /还原为十进制数 case 48: t = 0; break; case 49: t = 1; break; case 50: t = 2; break; case 51: t = 3; break; case 52: t = 4; break; case 53: t = 5

12、; break; case 54: t = 6; break; case 55: t = 7; break; case 56: t = 8; break; case 57: t = 9; break; *shuzi_P = *shuzi_P * 10 + t; return 1 ; /判断字符串函数返回值处理函数void chuli_p_zfc(char cansu, int *p_shuzi) while(1) scanf(%s,cansu); if( p_zfc(cansu, p_shuzi) = 0) /判断输入值是否为数值型字符串函数 printf(输入错误,请输入整数!n); con

13、tinue; if(*p_shuzi = 0) printf(请输入正整数!n); continue; else break; return ;/创建链表函数struct student* creat_list(int len) int i; struct student *phead, *pnew, *p1; /定义头指针变量,首指针变量,p1变量,尾指针变量 phead = (struct student * )malloc( sizeof(struct student) );/创建一个头结点,但不存任何数据,仅仅起引导作用,用户是不知道有这个节点的,只有程序员知道 if(NULL = p

14、head) printf(内存忙!n); exit(-1); /如果申请失败,终止整个程序 p1 = phead; /使p1和phead同时指向头结点 p1-pnext = NULL; for(i = 0; i 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 = N

15、ULL; /把p1-pnext的指定为空地址 return phead;/遍历链表函数void traverse_list(struct student *phead) struct student *p; p = phead-pnext; while(NULL != p) printf(学号:%dn姓名:%sn成绩:%dnn, p-no,p-name,p-chengji); p = p-pnext; printf(n); return;/判断链表是否为空函数int is_temp(struct student *phead) if(phead-pnext = NULL) return 1;

16、else return 0;/判断链表的长度函数int long_list(struct student *phead) int len;struct student *p;len = 0;p = phead-pnext; while(p != NULL) len+; p = p-pnext; return len; /根据学号从小到大排序void no_sort_list(struct student *phead, int len ) int i,j,t1; char t220; struct student *p, *q; for(i = 0,p = phead-pnext; i pne

17、xt) for(j = i+1,q = p-pnext; j pnext) if(p-no q-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-chengji; / 交换成绩数据 q-chengji = t1; return; /根据成绩从大到小排序void chengji_sort_list(struct student *phead,

18、int len ) int i,j,t1; char t220; struct student *p, *q; for(i = 0,p = phead-pnext; i pnext) for(j = i+1,q = p-pnext; j pnext) if(p-chengji chengji) 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-che

19、ngji; / 交换成绩数据 q-chengji = t1; return;/插入链表函数void insert_list(struct student *phead, int insert_location) struct student *p,*p1; int i; i=0; p = phead; while(p != NULL & i pnext;i+; if(p = NULL) /判断是否超出范围 printf(超出范围!n);return ; p1 = (struct student *)malloc(sizeof(struct student); printf(新节点建立好了,请输

20、入原始信息!n); /赋初值 printf(学号:); scanf(%d, &p1-no); fflush(stdin); printf(姓名:); scanf(%s, p1-name); fflush(stdin); printf(成绩:); scanf(%d, &p1-chengji); fflush(stdin); printf(n); p1-pnext = p-pnext; p-pnext = p1; printf(新节点插入成功!n); return ;/删除链表函数void delete_list(struct student *phead, int delete_location

21、) struct student *p,*p1,*p2; int i; if(is_temp(phead) = 1) printf(此链表也空,不能再执行删除操作!n);return; p = phead;i = 0; while(p-pnext != NULL & i pnext;i+; if(p-pnext = NULL) /判断是否超出范围 printf(超出范围!n); return ; p1 = p-pnext; / 先把要删除的那个节点之前的结点里的pnext里的地址保存到p1 p2 = p; /把把要删除的那个节点之前的结点的地址保存到p2 p = p-pnext; /得到要删除的那个节点里的pnext里的地址 p2-pnext = p-pnext; /把要删除的那个节点里的pnext里的地址拷贝到要删除那个节点前一个节点里的pnext空间里 free(p1); /释放空间,避免内存泄露 return ;/对结点内容进行修改函数void chang

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论