zoukankan      html  css  js  c++  java
  • 第一版

    作者:小代码

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

    IDE:VC6.0

    功能:

    一、输入:
     1、尾部追加
     2、追加多个

    二、输出所有信息

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

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

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

    六、写入文件

    代码:

    StuMain.c

    #include<stdio.h>
    #include<stdlib.h>
    #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 时,输入结束.
    ");
    				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	成绩:%.2lf
    ",temp->xu,temp->num,temp->name,temp->age,temp->score);
    				}
    				
    				break;
    			}
    		case 5:
    			{
    				printf("%.2lf
    ",maxScore( head ) );
    				break;
    			}
    		case 6:
    			{
    				printf("%.2lf
    ",minScore( head ) );
    				break;
    			}
    		case 7:
    			{
    				printf("%.2lf
    ",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	成绩:%.2lf
    ",temp->xu,temp->num,temp->name,temp->age,temp->score);
    				}
    				else
    				{
    					printf("无此学生信息!
    ");
    				}
    				break;
    			}
    		case 11:
    			{
    				writeFile( head );
    				break;
    			}
    		case -1:
    			{
    				getchar();
    				char ch;				
    				printf("是否退出系统?Y/N");
    				ch = getchar();
    				if ( 'Y' == ch || 'y' == ch )
    				{
    					printf("已退出系统...
    ");
    					exit(0);
    				}				
    				break;
    			}
    		default :
    			{
    				printf("输入的命令无效,请重新输入!
    ");
    				break;
    			}
    		}
    
    		printf("学生信息管理系统:");
    		or = scanf("%d",&order);
    	}
    	
    
    	printf("
    
    Hello World!
    ");
    	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("	1-%-15s	2-s%-15s
    ",one,two);
    	printf("	3-%-15s	4-s%-15s
    ",three,four);
    	printf("	5-%-15s	6-s%-15s
    ",five,six);
    	printf("	7-%-15s	8-s%-15s
    ",seven,eight);
    	printf("	9-%-15s	10-s%-15s
    ",nine,ten);
    	printf("	11-%-15s	-1%-15s
    ",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<stdio.h>
    #include<stdlib.h>
    #include"Student.h"
    
    //初始化
    pMAN Init( void )
    {
    	pMAN head = (pMAN)malloc(sizeof(MAN));
    
    	if ( NULL == head )
    	{
    		printf("初始化失败!
    ");
    	}
    
    	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("信息为空!
    ");
    		return ;
    	}
    
    	pSTU temp = head->first;
    
    	while ( NULL != temp )
    	{
    		printf("%-3d| 学号:%-10s姓名:%-15s年龄:%d	成绩:%.2lf
    ",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!
    ");
    		return temp;
    	}
    	
    	if ( n > head->len )
    	{
    		printf("序号应不大于 %d!
    ",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("信息为空!
    ");
    		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("信息为空!
    ");
    		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("信息为空!
    ");
    		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("信息为空!
    ");
    		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	成绩:%.2lf
    ",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("信息为空!
    ");
    		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	成绩:%.2lf
    ",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("信息为空!
    ");
    		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("打开文件失败!
    ");
    		return;
    	}
    
    	temp = head->first;
    
    	while ( i <= head->len )
    	{
    		fprintf( fp, "%-3d| 学号:%-10s姓名:%-15s年龄:%d	成绩:%.2lf
    ",temp->xu,temp->num,temp->name,temp->age,temp->score);
    		temp = temp->next;
    		i++;
    	}
    
    
    }


     

  • 相关阅读:
    批量数据导入数据库方法
    Remoting简单实践
    js面向对象继承
    Linq实现t-Sql的各种连接
    数据库树状结构的关系表的删除方案
    记录一次SQL查询语句
    mvc请求过程总结
    T-sql表表达式
    各个浏览器的兼容问题及样式兼容处理(不定期补充)
    vue.js 键盘enter事件的使用
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3233856.html
Copyright © 2011-2022 走看看