博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第一版
阅读量:7109 次
发布时间:2019-06-28

本文共 8298 字,大约阅读时间需要 27 分钟。

 

作者:小代码

 

时间:2013年8月2日17:30:22

 

IDE:VC6.0

 

功能:

 

 

一、输入:

 1、尾部追加
 2、追加多个

二、输出所有信息

三、返回序号 为 n 的学生的信息

四、最高分、最低分、平均分

五、排序

 1、按序号排序
 2、按成绩排序

六、写入文件

 

 

代码:

 

StuMain.c

 

 

#include
#include
#include "Student.h"int main( void ){ void Menu( void );//菜单提示 int order; pMAN head = Init(); Menu(); printf("学生信息管理系统:"); int or = scanf("%d",&order); while ( true ) { if ( 0 == or ) { continue; } switch ( order ) { case 1: { append( head ); break; } case 2: { printf("信息全部为 0 时,输入结束.\n"); input( head ); break; } case 3: { show( head ); break; } case 4: { int xu; printf("输入待查序号:"); scanf("%d",&xu); pSTU temp = getIndex( head, xu ); if ( NULL != temp ) { printf("%-3d| 学号:%-10s姓名:%-15s年龄:%d\t成绩:%.2lf\n",temp->xu,temp->num,temp->name,temp->age,temp->score); } break; } case 5: { printf("%.2lf\n",maxScore( head ) ); break; } case 6: { printf("%.2lf\n",minScore( head ) ); break; } case 7: { printf("%.2lf\n",avrScore( head ) ); break; } case 8: { sortOfXu( head ); break; } case 9: { sortOfScore( head ); break; } case 10: { double seach; pSTU temp = NULL; printf("输入待查询成绩:"); scanf("%lf",&seach); temp = seachOfScore( head, seach ); if ( NULL != temp ) { printf("%-3d| 学号:%-10s姓名:%-15s年龄:%d\t成绩:%.2lf\n",temp->xu,temp->num,temp->name,temp->age,temp->score); } else { printf("无此学生信息!\n"); } break; } case 11: { writeFile( head ); break; } case -1: { getchar(); char ch; printf("是否退出系统?Y/N"); ch = getchar(); if ( 'Y' == ch || 'y' == ch ) { printf("已退出系统...\n"); exit(0); } break; } default : { printf("输入的命令无效,请重新输入!\n"); break; } } printf("学生信息管理系统:"); or = scanf("%d",&order); } printf("\n\nHello World!\n"); return 0;}//菜单提示void Menu( void ){ char one[] = "追加"; char two[] = "追加多个"; char three[] = "输出所有"; char four[] = "返回 n "; char five[] = "最高分"; char six[] = "最低分"; char seven[] = "平均分"; char eight[] = "序号排序"; char nine[] = "成绩排序"; char ten[] = "查询成绩"; char eleven[] = "写入文件"; char quit[] = "退出系统"; printf("\t1-%-15s\t2-s%-15s\n",one,two); printf("\t3-%-15s\t4-s%-15s\n",three,four); printf("\t5-%-15s\t6-s%-15s\n",five,six); printf("\t7-%-15s\t8-s%-15s\n",seven,eight); printf("\t9-%-15s\t10-s%-15s\n",nine,ten); printf("\t11-%-15s\t-1%-15s\n",eleven,quit); }

 

 

 

Student.h

 

struct Student{	char num[15];//学号	char name[20];//姓名	int age;//年龄	double score;//成绩	int xu;//序号	struct Student * next;};typedef struct Student STU;typedef struct Student * pSTU;struct StuMan{	pSTU first;//头结点	pSTU last;//尾结点	int len;//总信息数};typedef struct StuMan MAN;typedef struct StuMan * pMAN;pMAN Init( void );//初始化bool isEmpty( pMAN head );//是否为空void append( pMAN head );//追加void input( pMAN head );//追加多个void show( pMAN head );//输出所有pSTU getIndex( pMAN head, int n );//返回序号为 n 的学生信息double maxScore( pMAN head );//最高分double minScore( pMAN head );//最低分double avrScore( pMAN head );//平均分void sortOfXu( pMAN head );//按序号排序void sortOfScore( pMAN head );//按成绩排序pSTU seachOfScore( pMAN head, double seachScore );//按成绩查询void writeFile( pMAN head );//写入文件

 

 

 

Student.c

 

#include
#include
#include"Student.h"//初始化pMAN Init( void ){ pMAN head = (pMAN)malloc(sizeof(MAN)); if ( NULL == head ) { printf("初始化失败!\n"); } head->first = NULL; head->last = NULL; head->len = 0; return head;}//是否为空bool isEmpty( pMAN head ){ if ( 0 == head->len ) { return true; } else { return false; }}//追加void append( pMAN head ){ pSTU temp = (pSTU)malloc(sizeof(STU)); scanf("%s%s%d%lf",temp->num,temp->name,&temp->age,&temp->score); temp->next = NULL; if ( true == isEmpty( head ) )//如果信息为空,则在第一个位置追加 { head->last = temp; head->first = temp; head->len++; } else//信息不为空,则在最后一个位置追加 { head->last->next = temp; head->last = temp; head->len++; } head->last->xu = head->len;}//追加多个void input( pMAN head ){ if ( true == isEmpty( head ) )//如果信息为空,则先在第一个位置追加一个 { append( head ); } //不为空,或已经在第一个位置追加一个,在尾部追加 pSTU temp = (pSTU)malloc(sizeof(STU)); scanf("%s%s%d%lf",temp->num,temp->name,&temp->age,&temp->score); temp->next = NULL; while ( '0' != temp->num[0] ) { head->last->next = temp; head->last = temp; head->len++; temp->xu = head->len; temp = (pSTU)malloc(sizeof(STU)); scanf("%s%s%d%lf",temp->num,temp->name,&temp->age,&temp->score); temp->next = NULL; } }//输出所有void show( pMAN head ){ if ( true == isEmpty( head ) )//信息为空,则退出 { printf("信息为空!\n"); return ; } pSTU temp = head->first; while ( NULL != temp ) { printf("%-3d| 学号:%-10s姓名:%-15s年龄:%d\t成绩:%.2lf\n",temp->xu,temp->num,temp->name,temp->age,temp->score); temp = temp->next; }}//返回序号为 n 的学生信息pSTU getIndex( pMAN head, int n ){ pSTU temp = NULL; //如果序号不在合理范围内,则给出提示,并退出函数 if ( n < 1 ) { printf("序号应大于 1!\n"); return temp; } if ( n > head->len ) { printf("序号应不大于 %d!\n",head->len); return temp; } temp = head->first; while ( true ) { if ( n == temp->xu ) { break; } temp = temp->next; } return temp;}//最高分double maxScore( pMAN head ){ double max = -1; int i = 1; pSTU temp = head->first; if ( true == isEmpty( head ) ) { printf("信息为空!\n"); return max; } max = temp->score; temp = temp->next; for ( i = 2; i <= head->len; i++ ) { max = ( temp->score >= max ) ? temp->score : max; temp = temp->next; } return max;}//最低分double minScore( pMAN head ){ double min = -1; int i = 1; pSTU temp = head->first; if ( true == isEmpty( head ) ) { printf("信息为空!\n"); return min; } min = temp->score; temp = temp->next; for ( i = 2; i <= head->len; i++ ) { min = ( temp->score <= min ) ? temp->score : min; } return min;}//平均分double avrScore( pMAN head ){ double ave = 0; int i = 1; pSTU temp = head->first; if ( true == isEmpty( head ) ) { printf("信息为空!\n"); return ave; } for ( i = 1; i <= head->len; i++ ) { ave += temp->score; temp = temp->next; } ave = ave / head->len; return ave;}// 按序号排序void sortOfXu( pMAN head ){ if ( true == isEmpty( head ) ) { printf("信息为空!\n"); return ; } pSTU * pSort = (pSTU*)malloc(sizeof(pSTU)*head->len);//指针数组 int i = 1; int j = 1; pSTU temp = NULL; for ( i = 0, temp = head->first; i < head->len; i++, temp = temp->next )//保存各条信息指针 { pSort[i] = temp; } // for ( i = 0; i < head->len; i++ ) // { // printf("%-3d| 学号:%-10s姓名:%-15s年龄:%d\t成绩:%.2lf\n",pSort[i]->xu,pSort[i]->num,pSort[i]->name,pSort[i]->age,pSort[i]->score); // } for ( i = 0; i < head->len - 1; i++ )//指针排序 { for ( j = i + 1; j < head->len; j++) { if ( pSort[i]->xu > pSort[j]->xu ) { temp = pSort[i]; pSort[i] = pSort[j]; pSort[j] = temp; } } } //指针复位 head->first = pSort[0]; head->last = pSort[head->len - 1]; head->last->next = NULL; for ( i = 0; i < head->len - 1; i++ ) { pSort[i]->next = pSort[i+1]; }}//按成绩排序void sortOfScore( pMAN head ){ if ( true == isEmpty( head ) ) { printf("信息为空!\n"); return ; } pSTU * pSort = (pSTU*)malloc(sizeof(pSTU)*head->len);//指针数组 int i = 1; int j = 1; pSTU temp = NULL; for ( i = 0, temp = head->first; i < head->len; i++, temp = temp->next )//保存各条信息指针 { pSort[i] = temp; }// for ( i = 0; i < head->len; i++ )// {// printf("%-3d| 学号:%-10s姓名:%-15s年龄:%d\t成绩:%.2lf\n",pSort[i]->xu,pSort[i]->num,pSort[i]->name,pSort[i]->age,pSort[i]->score);// } for ( i = 0; i < head->len - 1; i++ )//指针排序 { for ( j = i + 1; j < head->len; j++) { if ( pSort[i]->score > pSort[j]->score ) { temp = pSort[i]; pSort[i] = pSort[j]; pSort[j] = temp; } } } //指针复位 head->first = pSort[0]; head->last = pSort[head->len - 1]; head->last->next = NULL; for ( i = 0; i < head->len - 1; i++ ) { pSort[i]->next = pSort[i+1]; }}//按成绩查询pSTU seachOfScore( pMAN head, double seachScore ){ pSTU seach = head->first; if ( true == isEmpty( head ) ) { printf("信息为空!\n"); return seach; } while ( NULL != seach ) { if ( seachScore == seach->score ) { break; } seach = seach->next; } return seach;}//写入文件void writeFile( pMAN head ){ char *str = (char*)malloc(sizeof(char)*25); pSTU temp = NULL; printf("输入文件名称:"); scanf("%s",str); int i = 1; FILE *fp; if ( NULL == ( fp = fopen( str, "w" ) ) ) { printf("打开文件失败!\n"); return; } temp = head->first; while ( i <= head->len ) { fprintf( fp, "%-3d| 学号:%-10s姓名:%-15s年龄:%d\t成绩:%.2lf\n",temp->xu,temp->num,temp->name,temp->age,temp->score); temp = temp->next; i++; }}

 

 

 

 

 

 

转载地址:http://hclhl.baihongyu.com/

你可能感兴趣的文章
【译】 WebSocket 协议第九章——扩展(Extension)
查看>>
如何架构一个数据工程
查看>>
CSS入门指南-4:页面布局
查看>>
Kotlin——高级篇(四):集合(Array、List、Set、Map)基础
查看>>
Java并发编程之锁机制之LockSupport工具
查看>>
浅析Vue源码(四)—— $mount中template的编译--parse
查看>>
In FontFamilyFont, unable to find attribute android:font的报错处理
查看>>
基于 Scala 的产品开发实践 | 掘金技术征文
查看>>
【面经】寒冬中的一年半前端跳槽
查看>>
2018,来年只剩追忆
查看>>
React Native图片选择裁剪组件
查看>>
[翻译] 理解 CSS 布局和块级格式上下文
查看>>
Android小知识-定时任务ScheduledThreadPoolExecutor
查看>>
Python基础算法库及可视化库使用实践-大数据ML样本集案例实战
查看>>
App extension 总结
查看>>
Redux 源码解读 —— 从源码开始学 Redux
查看>>
Android进阶 Android6 0运行时权限处理
查看>>
Spring Cloud Config—客户端
查看>>
【RxSwift 实践系列 1/3】为什么使用RxSwift
查看>>
Plasma进展受阻,社区开始推崇Snarks技术
查看>>