精华内容
下载资源
问答
  • C语言设计设计一个可进行学生成绩管理的程序,具备基本的成绩管理功能:如打印系统标题和菜单,打印学生成绩表,添加、删除学生记录,对学生信息查询,排序等。
  • #include<stdio.h> #include<...//创建学生结构 struct stu_type { char num[15];//学生学号 char name[10];//学生姓名 char gender[10];//学生性别 int dormitory_num;//学生宿舍号 char...
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    //创建学生结构
    struct stu_type
    {
    	char num[15];//学生学号
    	char name[10];//学生姓名
    	char gender[10];//学生性别
    	int dormitory_num;//学生宿舍号
    	char phone_num[20];//学生电话号码
    	int c;//学生成绩
    }; 
    struct stu_type stu[100];
    int stu_num=0;//初始化学生个数为0
    void add(); //添加信息
    int display(char str[]);//显示信息
    void id_find();//学号id查找
    void name_find();//name查找
    void sort_jx();//按成绩降序排序
    void sort_sx();//按成绩升序排序
    void save_txt();//保存txt信息
    void load_txt();//查询txt信息
    void main()
    {
    	while(1)
    	{
    		int choice;//可以选择的int类型的号码
    		printf("\n	欢迎使用学生信息管理系统\n");
    		printf("--------------------------------------------\n");
    		printf("1.添加学生信息	2.显示学生信息\n");
    		printf("3.(学号)查找学生信息	4.(姓名)查找学生信息\n");
    		printf("5.按成绩排序降序        6.按成绩排序升序\n");
    		printf("7.保存至文本文件        8.从文本文件读入\n");
    		printf("9.退出程序\n");
    		printf("--------------------------------------------\n");
    		printf("请选择功能模块,输入数字1-9");
    		while(1)
    		{
    			scanf("%d",&choice);
    			if(choice>=1 && choice<=9)
    				break;
    			else
    				printf("输入数字不正确,请重输入1-9:");
    		}
    		switch(choice)
    		{
    			case 1:	add();	break;//添加信息
    			case 2:	display("");	break;//显示,默认是输入字符串长度为0
    			case 3: id_find();	break;//按学生学号查找
    			case 4:	name_find();	break;//按学生姓名查找
    			case 5:	sort_jx();	break;//按成绩降序
    			case 6:	sort_sx();	break;//按成绩升序
    			case 7:	save_txt();	break;//保存为txt
    			case 8:	load_txt();	break;//从本地txt读取
    			case 9: exit(0);//退出程序
    		}
    	}
    }
    //添加信息
    void add()
    {
    	int i=stu_num;
    	printf("说明:依次输入学生信息,当输入的学号为0时表示输入结束\n");
    	while(1)
    	{
    		printf("请输入第%d个学生的信息\n",i+1);
    		printf("请输入学号:");
    		scanf("%s",stu[i].num);
    		if(strcmp(stu[i].num,"0") == 0) break;
    		printf("请输入姓名:");
    		scanf("%s",stu[i].name);
    		printf("请输入性别:");
    		scanf("%s",&stu[i].gender);
    		printf("请输入数宿舍号:");
    		scanf("%d",&stu[i].dormitory_num);
    		printf("请输入电话号:");
    		scanf("%s",&stu[i].phone_num);
    		printf("请输入成绩:");
    		scanf("%d",&stu[i].c);
    		i++;
    	 } 
    	 stu_num = i;
    	 printf("总共已输入%d个学生的信息\n",stu_num);
    }
    //显示信息如果输入字符串长度为0则执行遍历功能,如果长度不为0则启动查找功能(按学号或姓名查找)
    int display(char str[])
    {
    	int i, k=-1;//设置初值
    	//显示信息如果输入字符串长度为0则执行遍历功能
    	if(strlen(str) == 0)
    	{
    		if(stu_num>0)
    		{
    			printf("学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
    			for(i=0; i<stu_num; i++)
    				printf("%s\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
    				stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
    		 } 
    		 else
    		 	printf("学生信息为空!");
    	 }
    	//如果长度不为0则启动查找功能
    	else
    	 {
    	 	for(i=0; i<stu_num; i++)
    	 	{
    	 		//按学号查找
    	 		if(strcmp(str,stu[i].num) == 0)
    	 		{
    	 			printf("学生学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
    	 			printf("%s\t\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
    				stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
    				k = i;
    			 }
    			//按姓名查找
    			else if(strcmp(str,stu[i].name) == 0)
    	 		{
    	 			printf("学生学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
    	 			printf("%s\t\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
    				stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
    				k = i;
    			}
    		}
    			 if(k==-1)
    			 	printf("没有找到符合条件的学生\n"); 
    	}
    	return k;
    }
    //按学生学号查找
    void id_find()
    {
    	char str[15];
    	printf("请输入要查找的学生学号:");
    	scanf("%s",str);
    	display(str);
    }
    //按学生姓名查找
    void name_find()
    {
    	char str[20];
    	printf("请输入要查找的学生姓名:");
    	scanf("%s",str);
    	display(str);
    }
    //读取本地txt
    void load_txt()
    {
    	FILE * fp;
    	char fname[20];
    	int i=0, flag;
    	printf("请输入文件名(如:list.txt):");
    	scanf("%s",fname);
    	if((fp=fopen(fname,"r"))==NULL)
    	{
    		printf("不能打开文件,文件读取失败!\n");
    		return;
    	}
    	while(1)
    	{
    		flag=fscanf(fp, "%s %s %s %d %s %d \n",stu[i].num,
    		stu[i].name, stu[i].gender, &stu[i].dormitory_num, stu[i].phone_num, &stu[i].c);
    		if(flag == EOF)
    			break;
    		i++; 
    	}
    	stu_num = i;
    	printf("从文件中成功读取%d条记录!\n",i);
    	fclose(fp); 
    }
    //保存的本地txt
    void save_txt()
    {
    	FILE * fp;
    	char fname[20];
    	int i;
    	printf("请输入文件名(如:stu.txt):");
    	scanf("%s",fname);
    	if((fp=fopen(fname,"w"))==NULL)
    	{
    		printf("不能打开文件,文件保存失败!\n");
    		return;
    	}
    	for(i=0; i<stu_num; i++)
    		fprintf(fp, "%s %s %s %d %s %d \n",stu[i].num,
    		stu[i].name, stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
    	printf("文件保存成功!\n");
    	fclose(fp); 
    }
    //降序排序(应用经典冒泡排序)
    void sort_jx()
    {
    	int i,j;
    	struct stu_type temp;
    	for(i=0; i<stu_num-1; i++)
    	{
    		for(j=0; j<stu_num-i-1; j++)
    		{
    			if(stu[j].c<stu[j+1].c)
    			{
    				temp = stu[j];
    				stu[j] = stu[j+1];
    				stu[j+1] = temp;
    			}
    		}
    	}
    	printf("排序结果如下:\n");
    	printf("名次\t学生学号 姓名\t\t性别\t宿舍号 \t电话号\t\t成绩\n");
    	for(i=0; i<stu_num; i++)
    	{
    		printf( "%d\t %s\t %s \t %s \t %d \t %s \t %d\n",i+1,stu[i].num,
    		stu[i].name, stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c); 
    	}
    }
    //升序排序(应用经典冒泡排序)
    void sort_sx()
    {
    	int a,b;
    	struct stu_type temp_2;
    	for(a=0; a<stu_num-1; a++)
    	{
    		for(b=0; b<stu_num-a-1; b++)
    		{
    			if(stu[b].c>stu[b+1].c)
    			{
    				temp_2 = stu[b];
    				stu[b] = stu[b+1];
    				stu[b+1] = temp_2;
    			}
    		}
    	}
    	printf("排序结果如下:\n");
    	printf("名次\t学生学号 姓名\t\t性别\t宿舍号 \t电话号\t\t成绩\n");
    	for(a=0; a<stu_num; a++)
    	{
    		printf( "%d\t %s\t %s \t %s \t %d \t %s \t %d\n",a+1,stu[a].num,
    		stu[a].name, stu[a].gender, stu[a].dormitory_num, stu[a].phone_num, stu[a].c); 
    	}
    }
    
    

    效果:

    1.界面风格
    在这里插入图片描述
    2.读取之前存储在txt里的学生信息并显示(可以添加完保存后再读取)
    在这里插入图片描述
    3.插入信息
    在这里插入图片描述
    4.按学号或者姓名查找:在这里插入图片描述
    5.按成绩降序排列
    在这里插入图片描述
    6.按程序升序排列
    在这里插入图片描述

    展开全文
  • c语言书写学生管理系统,课程设计用的,便于修改和添加功能,注解详细
  • C语言学生成绩管理系统课程设计
  • C语言课程设计学生管理系统,包括对学生成绩的管理,语文数学英语,对成绩的增删改查,成绩的排序,学生信息的增删改查,排序统计等基本的操作,采用多种界面的切换
  • 主要为大家详细介绍了C语言学生成绩管理系统设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 这是大学生的C语言课程设计学生管理系统源码,顺利运行,没有出错。
  • C语言 课程设计 学生管理系统C语言 课程设计 学生管理系统C语言 课程设计 学生管理系统C语言 课程设计 学生管理系统C语言 课程设计 学生管理系统
  • 管理系统能够实现:学生加入,学生毕业,学生成绩统计,学生查询,学生排名等管理操作。(要考虑考试课和考查课的比重关系) ③ 为方便查找,要求针对学生姓名进行散列法查找。 ④ 管理系统应有完整地界面...
  • 主要介绍了C语言学生学籍管理系统课程设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了C语言学生成绩管理系统设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C语言课程设计学生信息管理系统,还过得去,适合给初学者作参考
  • 完整的C语言学生管理系统设计与实现。 帮助大家通过各种C语言作业要求。
  • 学生成绩管理系统设计》 二、实训目的 (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。 (2)掌握C++的基本概念和基础知识。 (3)通过训练能够读懂较为复杂的C++语言源程序...

    很多朋友私信要一份C语言学生成绩管理系统设计报告,提供一下获取方法吧

    扫描下方公号,发送 成绩系统 三个字,获取实训报告。

    后续也会把之前搜集到的优质管理系统相关资料分享出来,大家一起学习,下面是作者自己的一份实训报告,希望能帮助到大家

    一、课程设计题目

    《学生成绩管理系统设计》

    二、实训目的

    (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。

    (2)掌握C++的基本概念和基础知识。

    (3)通过训练能够读懂较为复杂的C++语言源程序并具备基本C++语言程序设计的能力。

    4)通过实训,培养自己编写、调试、分析程序的能力。

    5)培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。

    6) 培养自己良好的学习兴趣,独立的编程风格。

    7) 通过实训检查自己学习上的不足,达到熟练掌握C++语言的基本知识和技能。

    三、课程设计报告内容

    3.1功能要求

    该系统运行在DOS环境下,人机界面为命令行文本界面。完成的任务是对若干人的成绩信息进行管理,且数据保存到文件中。

    实现的主要功能是:

    系统以菜单方式进行工作

    学生信息和成绩输入功能

    学生信息和成绩输出功能

    学生信息和成绩浏览功能

    查询学生信息及成绩功能

    修改学生信息及成绩功能

    学生成绩排序

    以稳健的形式进行保存

    3.2 设计环境

    所使用的语言采用标准C,开发工具可选用在DOS环境下的Turbo C

    3.3 数据结构

    本系统是对学生成绩的信息进行管理,学生成绩信息采用C的结构体数据类型描述,定义如下:

    struct students
    {
       int num;          //学号-整型//
       char name[8];    //姓名-字符型//
       char chinese;    //大学语文-字符型//
       char math;       //大学数学-字符型//
       char computer;   //计算机-字符型//
       char sum;        //总成绩-字符型//
       char ave;        //平均分-字符型//
    }

    3.4实现方法及主要算法分析

    (1)主界面的设计:主界面采用文本菜单的形式,各功能调用通过菜单进行选择。采用循环处理,以便执行完某项处理后,仍可选择其他项处理。在循环内先显示提示信息,然后读取用户输入,使用switch语句对用户的输入进行判断,分别调用相应的模块,当某模块结束后再次回到文本菜单,直到用户选择结束程序菜单,才退出循环,从而退出系统。

    (2) 外部文件的类型:文件采用的二进制的文件,对文件的读写采用顺序文件的方式,并使用fread和fwrite等函数对文件进行操作。

    (3)清屏函数:一般由上一级菜单屏幕进入下一级菜单屏幕或由下一级菜单屏幕返回上一级菜单屏幕都需要清除屏幕原来显示的内容。同时在调用程序的过程中,记录需要清屏的位置,然后修改代码,加入clrscr()函数清屏。

    (4)提示信息:一般的输入与输出需有相应的提示信息,以增加用户的交互性,增加输出的可读性,以帮助用户使用程序。

    3.5模块设计

    根据功能要求,本系统为五大主要模块,具体模块如表所示。

    学生信息成绩管理系统的模块

    3.6处理流程

    (1)学生成绩管理系统主界面模块

    2)成绩输入模块 和(3)成绩排序模块

    (4)删除记录

    (5)修改记录

    (6)查找信息

    四、结论

    学生成绩管理系统的编写,看似杂乱无头绪,实际上却并不如此。它的每一个功能都能分成模块,有句话说的好,大事化小,小事化了。C语言编程也正式如此,把一个大的程序分为若干相互独立的模块,这样使完成每一个模块的工作变得单纯而明确,这样不仅降低了难度还使得思路清晰,很容易编写出要做的程序,从而为设计一些较大的软件打下了良好的基础。

    分析问题:

    学生成绩管理系统的整体功能都包括、增加成员、删除成员、查看成员、修改成员、登陆口令五大板块,而查看有包括学号,姓名,大学语文成绩,大学数学成绩,计算机成绩,总成绩,平均分七个模块。

    1. 设计的数据对象包括整形:学号。字符型:姓名、3门课程成绩、总成绩、平均成绩。
    2. 数据结构线性数据结构,定义人数上限为1000.

    算法的设计:

    1. 自顶向下

      现有全局,在进行整体设计,然后再进行下层的设计,逐步实现精细化。采用这种方法能够做到胸有全局,能全盘考虑,不至于顾此失彼,头重脚轻。

    1. 逐步细化

       一步步地将上层的任务分解成较小的、易于实现的任务,知道可以很简单实现为止。

    编写源程序:

    1. 不求速度,但求质量!一步一个脚印,编写程序时候宁可速度慢些也要尽量保证质量,做到尽量不出错。
    2. 精力集中,全神贯注!写程序时候最忌讳三心二意,这样才能思路清晰保证质量。
    3. 保持一个良好的编程心态,不要被长长的代码吓到

    程序的编译与运行:

    1. 查找错误是一件让人闹心的事,但是要注重技巧,注意平时经验的积累。
    2. 程序编译成功不要满足现状,要积极测试程序的可用性,对功能不理想,存在缺点的地方,积极的改进,完善。

    五、结束语

    在实训过程中,使我良好的锻炼了自己,首先是兴趣方面,通过编写通讯录管理系统使我更加喜欢编程,使我从以前的迷茫状态中解脱出来,使我了解了编程的真正意义。我想这对我以后的人生有着很大的帮助。其次通过编写通讯录管理系统使我对写程序有了一定的思路,不像以前无从下手,使我理解了算法的意义,使我懂得了模块化思想的好处。

    通过一个星期的编写代码,使我对书本上的知识有了更深的理解,甚至有很多不懂的问题在这过程中自然而然的理解了。对期末考试更有了信心。在朱老师的悉心指导下,我对C语言有了更深刻的理解,对程序的算法,数据的定义,程序的改错等方面的能力有了很大提高,自身的注意力,耐心,和对编程的兴趣有了很大增长,使我获益匪浅。

    六、参考书目:

    [1]谭浩强,《C语言程序设计》,清华大学出版社

    附完整代码:

    #include<stdio.h>
    #include<string.h>    //比较字符串头文件//
    #include<stdlib.h>   //实时检测总数头文件//
    #define N 1000       //控制最大输入//
    int n=0;             //实时检测的总数n//
    
    /*定义结构体students*/																	       
    struct students
    {
       int num;          //学号-整型//
       char name[8];     //姓名-字符型//
       char chinese;     //大学语文-字符型//
       char math;        //大学数学-字符型//
       char computer;    //计算机-字符型//
       char sum;         //总成绩-字符型//
       char ave;        //平均分-字符型//
    }student[N],student1;     //student[N]是结构体数组student1是结构体的初始化//
    
      /*实时检测总数n*/
    void count()  
     {
    	FILE *fp;         //定义一个文件指针fp//
    	fp=fopen("students.txt","at+");     //以“追加”方式打开students文本文件//
    	if(fp==NULL)                        //判断文件是否为空//
    		printf("Cannot open file!");
        struct students stu1;                 
    	n=0;         //初始化//
    	while(1)
    	{
    	  if(feof(fp))  //检测文件是否结束//
    	  break;
          fread(&stu1,sizeof(struct students),1,fp);   //读取文件//
    	  n++;    //读取文件数//
        }
    	n--;           //关闭文件数//
    	fclose(fp);    //关闭文件//
     }
    
    /*菜单*/
    void main()
    {
    	int i;        //获取用户在菜单中的选择//     
    	while(i!=0)
    	{
    		system("cls");     //清屏//
    	printf("\t\t欢迎进入学生信息管理系统\n");
      printf("\t\t==============================\n");
    		printf("\t\t*请择操作                    *\n");
    		printf("\t\t*1输入学生信息               *\n");
    		printf("\t\t*2输出学生信息               *\n");
    		printf("\t\t*3修改学生信息               *\n");
    		printf("\t\t*4查询学生信息               *\n");
           printf("\t\t*5排序学生信息               *\n");
    		printf("\t\t*6退出                       *\n");
    	printf("\t\t==============================\n");
     scanf("%d",&i);
     system("cls");     //清屏// 
    		count();     //实时检测总数n//
    		switch(i)
    		{
    		 case 1:input();break;    //输入学生信息//	
    		 case 2:output();break; 	//输出学生信息//
    	     case 3:xiugai();output();break;    //修改学生信息//
            case 4:query();break;    //查询学生信息*/
            case 5:paixu();output();break;    //成绩排序//
    	default:
    		   printf("输入有错\n");     //错误纠正//  
    		}
    	}
    	   if(i==0)
    	     tuichu();        //退出系统//
    }
    
    
    /*成绩输入*/
    void input()   
    {
      int i=0;     //学生人数初始化//
      char c;
      FILE *fp;     //定义一个文件指针fp//
    	count();     //实时检测总数n//
    	fp=fopen("students.txt","at+");    //以“追加”方式打开students文本文件//
      do 
      {	
       printf("请输入学生的个人信息:\n");
         printf("\n请输入第%d学生的信息:\n",n+1);
         printf("请输入学生的学号:");
         scanf("%d",&student[i].num);
         printf("请输入学生的姓名:");
        scanf("%s",student[i].name);getchar();
        printf("请输入学生的大学语文成绩");
        scanf("%s",student[i].chinese);
        printf("请输入学生的大学数学成绩:");
        scanf("%d",&student[i].math);
        printf("请输入学生的计算机成绩:");
        scanf("%s",student[i].computer);
         getchar();
         student[i].sum=student[i].chinese+student[i].math+student[i].computer;
    		student[i].ave=student[i].sum/3;
    fwrite(&student[i],sizeof(struct students),1,fp);  //以方式将其写入students文本文件//
    	i++;     
    	n++;      
    	printf("\n\n\t\t\t\t是否继续输入(Y/N):");getchar();     //提示是否继续,从键盘  
                                                               获得一个字符//  
    scanf("%c",&c);  
      }
     while(c=='y'||c=='Y');
     fclose(fp);
    }
    
    /*成绩输出*/        
    void output()  
    {
      int i;
      char c;
      FILE *fp;      //定义一个文件指针fp//
      fp=fopen("students.txt","rt");    //以“读取的” 方式打开students文本文件//
      system("cls");     //清屏//
      getchar();
        
    printf("||------||-----||-----||-----||------||-------||-------||------||");
    	printf("|#学号-----姓名------大学语文------大学数学------计算机------总成绩
    -----平均分---#|\n");
      do{  
    	  for(i=0;i<n;i++)  
    	  { 
           fread(&student[i],sizeof(struct students),1,fp);  
           printf("%d",student[i].num);
            printf(" %d",student[i].name);
    	        printf("%d",student[i].chinese);
              printf(" %d ",student[i].math);
              printf("%d ",student[i].computer);
              printf("%d",student[i].sum);
              printf(" %d ",student[i].ave);
         
    	  }
    printf("|------||-----||------||-----||-----||-----||-----||------ |");
      	  printf("\n\n\t\t\t\t是否继续其它操作(Y/N):");     //提示是否继续//
    	      scanf("%c",&c);
    	  c=getchar();
    	}while(c=='y'||c=='Y');
         fclose(fp);      //关闭文件//
    }
    
    /*成绩修改*/
    void xiugai()  { 
      int i,tp,num1;
      char c; 
      FILE *fp;     //定义一个文件指针fp//
    
    lb:  
      printf("\n按学号修改\n\n");
      printf("请输入要修改的学生学号\n");
      scanf("%d",&num1);
    
     for(i=0;i<n;i++) 
     {
    	if(num1==student[i].num)
    	  { 
    		printf("要修改的学生信息为:\n");
            printf("学号\t姓名\t大学语文成绩\t大学数学成绩\t计算机成绩\t总成绩\t
    平均分\n");          
            printf(" %d ",student[i].num);
            printf(" %d ",student[i].name);
            printf(" %d ",student[i].chinese);
            printf(" %d ",student[i].math);
            printf(" %d ",student[i].computer);
            printf(" %d ",student[i].sum);
            printf(" %d ",student[i].ave);
            do {
    		    printf("请选择要修改项:\n");
                printf("1学号\n2姓名\n3大学语文成绩\n4大学数学成绩\n5总成绩\n6平
    均分\n");
                scanf("%d",&tp);
    	            switch(tp)
    			{
    	         case 1:
    				{	 printf("请输入学号:\n");
    		          scanf("%d",&student[i].num);
    		          goto la;
    				}	
    	  	      case 2:
    				{ printf("请输入姓名:\n");
    		          scanf("%s",student[i].name);
    		          goto la;
    				}	
    	  	      case 3:
    				{ printf("请输入大学语文成绩:\n");
    				  getchar();
    		          scanf("%c",&student[i].chinese);
    		         goto la;
    				}	
    	  	      case 4:
    				{ printf("请输入大学数学成绩:\n");
    		          scanf("%d",&student[i].math);
    		         goto la;		  
    				}	
    	  	      case 5:
    				{printf("请输入计算机成绩:\n");
    		          scanf("%s",student[i].computer);	
    		         goto la;
    				}	
    	  	     case 6:
    				{ printf("请输入总成绩:\n");
    		          scanf("%s",student[i].sum);
    		         goto la;
    				}	
    	  	     case 7:
    				{ printf("请输入平均分:\n");
    		          scanf("%s",student[i].ave);
    		         goto la;
    				}
    			}
    		}while (tp<8);		 
    la:	  printf("是否继续修改(y/n)\n");     //提示是否继续//
    	  getchar();
    	  scanf("%c",&c);
    	  if(c=='y'||c=='Y')  goto lb;
             }
      }
        fp=fopen("students.txt","w+");   //以“读写” 方式打开students文本文件//
    	  for(i=0; i<n;i++)
    	  fwrite(&student[i],sizeof(struct students),1,fp);  //以 方式将其写入students
                                                     文本文件//
     fclose(fp);    //关闭文件//
    }
    
    
    /*成绩查询*/
    void query()
    { int querymode;     //子菜单选择//
      int i,j=0,findnum;
      char findname[20];
      int findok,t=0;     //定义一个判断标志的整型变量findok//
      char findct;        //定义一个用于判断是否继续查找的字符变量findct//
      
       FILE *fp;         //定义一个文件指针fp//
       count();     //实时检测总数n//
       fp=fopen("students.txt","r");       //以“只读” 方式打开students文本文件//
       system("cls");     //清屏//
    
      /*查询菜单*/
      printf("\t\t信息查询");
      printf("\n\t1按姓名查询");
      printf("\n\t2按学号查询");
      printf("\n\t0返回上级菜单");
      printf("\n请输入您的操作:");
      scanf("%d",&querymode);
    
      /*查询操作*/
      switch(querymode)
      {case 1: 
        {     printf("请输入要查询学生的姓名:\n");
                getchar();
                scanf("%s",findname); 
                for(i=0;i<N;i++)
    		{
         fread(&student[i],sizeof(struct students),1,fp); //以方式将其读入students
                                                          文本文件//
       if(strcmp(student[i].name,findname)==0)        //比较字符串//
    			 { 
    			   j++;
    			   printf("\n查寻到的学生为:\n");
    			   if(j==1)
                              、
    printf("|------||-----||------||------||------||-------||------||-----|");    
    //仅在第一次显示//
    	printf("|#学号-----姓名------大学语文------大学数学------计算机------总成绩-
    ----平均分---#|\n");
              
    printf("%4d%d%d%d%d%d%d%d",student[i].num,student[i].name,
    student[i].chinese,student[i].math,student[i].sum,student[i].ave);
    			  }
    
    			}
    			if(j==0)
    			  printf("\n>>>查无此人!");
    
               //提示是否继续// 
                printf ("\n是否继续查找(Y/N)?");       
                getchar();
                getchar();}break;
      
        case 2:{ printf("请输入要查询学生的学号:");
                 scanf("%d",&findnum);
                 for(i=0;i<n;i++)
    			 {
                  fread(&student[i],sizeof(struct students),1,fp);        
    //以结构体students的方式从文件fp中读取,将其读入students文本文件,每次读入一个 
    学生的信息//
                  if(student[i].num==findnum)      //整型数字的比较// 
    			  {findok=1;break;}
    			  else findok=0;
    			 }
                  if(!findok)
    				printf("\n>>>查无此人!");
    			  else
    			  { printf("\n查寻到的学生为:\n") ;
    			    if(j==1)
                          printf("|-------||------||------||-------||-------||-------||-------||------|");   
     //仅在第一次显示//
     printf("|学号-----姓名------大学语文------大学数学------计算机------总成绩-----平均分---|\n");
     printf("%4d%d%d%d%d%d%d%d",student[i].num,student[i].name,
    student[i].chinese,student[i].math,student[i].sum,student[i].ave);
    			  }
    //提示是否继续//
          printf ("\n是否继续查找(Y/N)?");       
            getchar();
    			findct=getchar();     //从键盘输入一个判断字符,并将它赋值给字符变量
                                   findct,用于以下的if语句的判断 //
    			if(findct=='Y' || findct=='y')
    			  query();
    		  }
      }
      fclose(fp);    //关闭文件//
    }
    
    
    /*成绩排序*/
    void paixu()
    {
       int i, j;
         FILE *fp;       //定义一个文件指针fp//
       system("cls");      //清屏//
       count();       //实时检测总数n// 
       for(i=0;i<n-1;i++)
    	    for(j=0;j<n-1-i;j++)    //按学号对学生信息进行排序//
    		{
    		     if(student[j].num>student[j+1].num)   //整型数字的比较//
    			 {
    			     student1=student[j];
    			     student[j]=student[j+1];
    			     student[j+1]=student1;
    			 }
    		}
    	fp=fopen("students.txt","w+");  //以 “读写”方式打开students文本文件//
    	for(i=0;i<n;i++)
    	fwrite(&student[i],sizeof(struct students),1,fp);  //以结构体students的方式从
       文件fp中读取,将其写入students文本文件,每次写入一个学生的信息//
        fclose(fp);      //关闭文件//
    }
    
    /*退出系统*/
    void tuichu() 
    {
    	char c;
    	  system("cls");      //清屏//
        printf("\n\n\t\t谢谢使用\n\n\n");
        printf("\n\n\t\t制作人:李姣 渠莉 宝珠 朱佳 刘妍\n");
    	  getchar();
    	c=getchar();       //取用户输入,回显//    
    }

    需要实训报告的同学,请在下方留言,看到会一个个回复的。

    或者直接扫描下方公号,发送 成绩系统 三个字,获取下载源码

    如果失效了,再请直接私信或留言,欢迎大家一起探讨学习。

    相关文章推荐:

    1、 C语言学生成绩管理系统源代码 ★★★★★

    2、 C语言学籍管理系统源代码 ★★

    3、C语言学生成绩管理系统设计 《C语言程序设计》实训报告 ★★★

    展开全文
  • C语言设计学生宿舍管理系统

    万次阅读 多人点赞 2019-02-19 15:14:21
    这个只是简单的系统,只有一个关系表。如果你是为了应付老师则足矣,如果是为了优秀,那就要自己添加更多的关系表和功能块,比如可以再添加宿舍表,通过这个关系表,可以查看,这个宿舍有没有空床位;当给宿舍添加...

    这个只是简单的系统,只有一个关系表。如果你是为了应付老师则足矣,如果是为了优秀,那就要自己添加更多的关系表和功能块,比如可以再添加宿舍表,通过这个关系表,可以查看,这个宿舍有没有空床位;当给宿舍添加学生时,遇到宿舍爆满,就会添加失败等功能。


    之前我发布上去的时候市可以运行的,后来可能是版本更新对语法要求更高,导致编译不过,现在已经对代码做了修改了。


    以下为代码**:**

    #include"stdio.h"
    
    #include"stdlib.h"
    
    #include"string.h"
    
    #include "conio.h" 
    
    #include "windows.h"
    
    #define MAX 1000
    
    
      /*结构体类型*/
    
    typedef struct  
    
    {   
    	int num;/*学号*/
    	
    	char name[20];/*姓名*/
    	
    	char sex[5];/*性别*/
    	
    	int age;/*年龄*/
    	
    	char studentclass[20];/*班级*/
    	
    	int dorm;/*宿舍号*/
    
    }STUDENTS;
    
    //查找指针 
    typedef struct Points
    {
       int a;
       struct Points *points;
    }Points;
    
    char xiugai[10]="修改";
    char chaxun[10]="查询"; 
    char xuehao[]="学号";
    char xingming[]="姓名";
    char xingbie[]="性别";
    char nianling[]="年龄";
    char banji[]="班级";
    char sushe[]="宿舍";
    
    
    
    /*共用的功能块 */
    
    
    void pause(){
    	int i;
    	printf("\n\n按任意键加回车返回主菜单!");
        scanf("%d",&i);
        getchar();
    } 
    
    void print(STUDENTS stu[],int point){
    	printf("\n\n\n学号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,宿舍号: %d\n",
    			 stu[point].num,stu[point].name,stu[point].sex,stu[point].age,stu[point].studentclass,stu[point].dorm);
    }
    
    void printfNotFound(){
    	printf("找不到该数据\n");
    }
    
    void printSearch(STUDENTS stu[],int i){
       printf("		     %7d%11s%10s%10d%12s%12d\n\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].dorm);
    }
    
    void printHead(){
    		printf(" 		-------------------------------------------------------------------------------\n");
    	    printf("		-------------------------------------------------------------------------------\n");
    	    printf("			学号:     姓名:     性别:     年龄:     班级:     宿舍号:     \n"); 
    	    printf(" 		-------------------------------------------------------------------------------\n");
    		printf(" 		-------------------------------------------------------------------------------\n\n\n");
    
    }
    
    //默认继续 
    int a=1;
    void selectOperate(){
    	
    	button:
    	    printf("继续操作请按1,返回主菜单请按0  ");
    		scanf("%d",&a);
    		if(!(a==1||a==0))	
    	 	{		
    	 		printf("请输入正确的指令"); 
    	 		goto button;		 		
    	 	}
    }
    
    
    
    
    
    
    //读取文件,返回的是总个数 
    int read_file(STUDENTS stu[])
    {
    	FILE *fp;	
        int point=-1;
    	fp=fopen("stu.txt","rt");
    	if(fp==NULL)	
    	{
    		printf("\n\n*****库存文件不存在!请创建");	
    		return 0;
    	}
    	while(!feof(fp))	
    	{
    		point++;
    		fread(&stu[point],sizeof(STUDENTS),1,fp);	
    	}	
    	fclose(fp);	
    	return point;
    
    }
    
    //存储数据到文件中 
    void save_file(STUDENTS stu[],int sum)//sum是总个数 
    {
    	FILE *fp;	
    	 int i;	
    	 if((fp=fopen("temp.txt","w"))==NULL)	
    	 {
    	 	printf("写文件错误!\n");	
    		return;	
    	 }	
    		for(i=0;i<sum;i++)	
    			if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)	
    	  			printf("写文件错误!\n");
    	
    	fclose(fp);
    	remove("stu.txt");
    	rename("temp.txt","stu.txt");
    
    }
    
    
    /*创建学生信息*/
    //返回的是总数 
    int input(STUDENTS stu[],int sum)
    {  
    	int x;
       for(;sum<MAX;sum++)
      {
    	system("cls");    
    	
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        创建学生宿舍信息        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    
        printf("\n\n                 录入学生信息  (最多%d个)\n",MAX);
        printf("               ----------------------------\n");
        printf("\n                     第%d个学生\n",sum+1);
    	printf("\n 请输入学生的学号:");
        scanf("%d",&stu[sum].num);
        printf("\n 请输入学生的姓名:");
        scanf("%s",stu[sum].name); 
    	printf("\n 请输入学生的性别:");
        scanf("%s",stu[sum].sex);
        printf("\n 请输入学生的年龄:");   
        scanf("%d",&stu[sum].age);  
        printf("\n 请输入学生的班级:");
        scanf("%s",stu[sum].studentclass);        
        printf("\n 请输入学生的宿舍号:");
        scanf("%d",&stu[sum].dorm);
        printf("		创建成功!");
    
    	//选择操作 
    		selectOperate();
    		if(a==0)
    			return sum+1;	
       }
           return sum+1;
    
    }
    
    
    /*打印学生信息*/                                                                                                                                                                                                                                                        
    void output(STUDENTS stu[],int sum)
    {  
       int i;
       system("cls");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        打印学生宿舍信息        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    
       printHead(); 
       for(i=0;i<sum;i++)      
      	 printSearch(stu,i);
     	 		
       pause();
    
    }
    
    
    /*排序  */ 
     
    
    
    /*复制student*/
    //将排好的装在一个新的students数组里 ,不要存到文件中 
     void cpStu(STUDENTS stu0[],STUDENTS stu[],int sum) {
     	int i;
     	for(i=0;i<sum;i++){
     		stu[i].num=stu0[i].num;
     		strcpy(stu[i].name,stu0[i].name);
     		strcpy(stu[i].sex,stu0[i].sex);
     		stu[i].age=stu0[i].age;
     		strcpy(stu[i].studentclass,stu0[i].studentclass);
     		stu[i].dorm=stu0[i].dorm;
     	}	
     }
    
    /*对数据元组排序*/
    void exchangeData(STUDENTS *stu1,STUDENTS *stu2){
    				stu1->num=stu2->num;
       				
       				stu1->dorm=stu2->dorm; 
    					 
    				stu1->age=stu2->age;
    					 
    				strcpy(stu1->name,stu2->name);
    					  
    				strcpy(stu1->sex,stu2->sex);
    					  
    				strcpy(stu1->studentclass,stu2->studentclass);	
    }
    
    
    int selectSort(){
    	
    	int choice;
    		
    	 printf("\n\n\n     ********请您选择条件进行排序********\n\n");
         printf("                1. 学号\n\n");
         printf("                2. 班级\n\n");
         printf("                3. 宿舍号\n\n");
         printf("                4. 姓名\n\n");
         printf("                0. 返回主菜单\n\n");
         printf("                 请选择(0-3):");
     	 scanf("%d",&choice);
     	 return choice; 
    }
    
    
    /*根据宿舍号从小到大排序   冒泡*/
    
    void sortByDorm(STUDENTS stu0[],int sum,STUDENTS stup[])
    
      {  
      	STUDENTS stu1;  //中间变量 
      	int i,j;
        
    	cpStu(stu0,stup,sum);
    	
        for(i=0;i<sum-1;i++)
    		for(j=0;j<sum-1-i;j++)
    			if(stup[j].dorm>stup[j+1].dorm)
    			  {
    				exchangeData(&stu1,&stup[j]);	
    				exchangeData(&stup[j],&stup[j+1]);	
    				exchangeData(&stup[j+1],&stu1);	
    			}
    
      }
     
      /*根据班级从小到大排序   选择*/
      
      void sortByClass(STUDENTS stu0[],int sum,STUDENTS stup[])
    
      {  
      	
      	STUDENTS stu1;			//中间变量 
      	int i,j,k;
    
    	cpStu(stu0,stup,sum);
    	
        for(i=0;i<sum-1;i++)
    	{
    		k=i;
    		for(j=i+1;j<sum;j++)
    			if(strcmp(stup[k].studentclass,stup[j].studentclass)>0)		
    					k=j;
    
    				
    		if(k!=i)
    		{
    			exchangeData(&stu1,&stup[i]);	
    			exchangeData(&stup[i],&stup[k]);	
    			exchangeData(&stup[k],&stu1);
    		}			
    	}
    	
    	
      }
      
       /*根据姓名从大到小排序   折半插入排序*/
    	//因为这里是从stu[1]开始操作的,所以得再创个中间变量 
      void sortByName(STUDENTS stu0[],int sum,STUDENTS stup[])
    
      {  
      	STUDENTS stu1;			//中间变量 
      	STUDENTS stu[1000];
      	int i,j,low,high,mid;
    
    		for(i=0;i<sum;i++){
     		stu[i+1].num=stu0[i].num;
     		strcpy(stu[i+1].name,stu0[i].name);
     		strcpy(stu[i+1].sex,stu0[i].sex);
     		stu[i+1].age=stu0[i].age;
     		strcpy(stu[i+1].studentclass,stu0[i].studentclass);
     		stu[i+1].dorm=stu0[i].dorm;
     	}	
    	
    	
    	for(i=2;i<sum+1;i++){
    		exchangeData(&stu1,&stu[i]);    /*保存待插入元素到stu1*/
    		 low=1;high=i-1;
    		 while(low<=high)
    		 {
    		 	mid=(low+high)/2;
    		 	if(strcmp(stu1.name,stu[mid].name)>0)
    		 		low=mid+1;
    		 	else
    		 		high=mid-1;
    		 	
    		 }
    		 for(j=i-1;j>=high+1;j--)
    			 exchangeData(&stu[j+1],&stu[j]);//后移元素,留出插入空位 
    		exchangeData(&stu[high+1],&stu1);		
    	}
    	
    	for(i=0;i<sum;i++){
     		stup[i].num=stu[i+1].num;
     		strcpy(stup[i].name,stu[i+1].name);
     		strcpy(stup[i].sex,stu[i+1].sex);
     		stup[i].age=stu[i+1].age;
     		strcpy(stup[i].studentclass,stu[i+1].studentclass);
     		stup[i].dorm=stu[i+1].dorm;
     	}	
    		
      }
      
      
      
    
       /*根据学号从大到小排序   插入的希尔排序*/
        
       void ShellInsert(STUDENTS stup[],int sum,int dk){   	
       	int i,j,k;
       	STUDENTS stu1;//中间变量 
       	for(k=0;k<dk;k++)
       		for(i=dk+k;i<sum;i=i+dk)
    			if(stup[i].num<stup[i-dk].num)
       			{
       			
       				exchangeData(&stu1,&stup[i]); 
       			
       				for(j=i-dk;j>=0&&stu1.num<stup[j].num;j=j-dk)//记录向后移    			
    					exchangeData(&stup[j+dk],&stup[j]); 
    			
    				exchangeData(&stup[j+dk],&stu1); 
    			}
       }    
      void sortByNum(STUDENTS stu[],int sum,STUDENTS stup[])
      {  
    
      	int i,x;
        
    	cpStu(stu,stup,sum);
    	
      	int dlta[5]={5,4,3,2,1};  	
      	for(x=0;x<5;x++)
      		ShellInsert(stup,sum,dlta[x]);
      	
      	
      }
      
      //总的函数 
      void sortStudent(STUDENTS stu[],int sum){
      	STUDENTS stup[1000];//引用,把排好序的放在这里,不跟原来的混淆 
      	int choice,x,i;
      	do{	
    	  	system("cls");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        学生宿舍信息排序        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    	  	
    	  	select:
    	  	choice=selectSort();
    	  	
    	  	system("cls");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        学生宿舍信息排序        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    		   
    	  	switch(choice)
    	    {	  
    	      case 1: sortByNum(stu,sum,stup); break;/*学生学号信息顺序*/
    	      case 2: sortByClass(stu,sum,stup);break;/*学生班级信息顺序*/     
    		  case 3: sortByDorm(stu,sum,stup); break;/*学生宿舍信息顺序*/
    		  case 4: sortByName(stu,sum,stup); break;/*学生姓名信息顺序*/
    	      case 0: break;
        	}
        	//打印排好序的 
        	printHead();
        	 for(i=0;i<sum;i++)
    			printSearch(stup,i);
        	
        	
        	if(choice==1||choice==2||choice==3||choice==4)
    		{
    	    	printf("\n\n");
    		   	button:
    			   printf("继续查询请按1,返回主菜单请按0  ");
    			   scanf("%d",&x);
    				if(x==1)	
    					x=1;
    				else if(x==0)
    				 	continue;
    				else
    				 	{		
    				 		printf("请输入正确的指令\n"); 
    				 		goto button;		 		
    				 	}
    		}
    		else if(choice==0)
    			x=0;
    		else
    		{
    			printf("\n\t\t请输入正确的指令\n"); 
    			goto select;
    		}
    		  
    	}while(x==1);
        
      } 
      
     
    
    
    
    
    
    
    /* 根据条件查找指针point*/ 
    ///
    
    
    //查询或者修改的选择; 
    int selectChoice(char tiaojian[20]){
    	
    	int choice;
    	
    	
    	 printf("\n\n\n     ********您想根据哪个条件%s********\n\n",tiaojian);
         printf("                1. 学号\n\n");
         printf("                2. 姓名\n\n");
    	 printf("                3. 性别\n\n");
         printf("                4. 年龄\n\n");
         printf("                5. 班级\n\n");
         printf("                6. 宿舍号\n\n");
         printf("                0. 返回主菜单\n\n");
         printf("                 请选择(0-6):");
     	 scanf("%d",&choice);
     	 return choice; 
    }
    
    
      ///????????????????????????????为什么这里的指针得返回菜可行,参数不是指针,操作的是地址的???? 
    Points *connectPoint(Points *r,Points *p,int i){
      		p=(Points *)malloc(sizeof(Points));
    		p->a=i;
    		r->points=p;
    		r=p;
    		return r;
      }
      
      //choice是指主菜单中的功能选项,字符数组tiaojian为相应的字符,比如如果选择查询的话,
      //tiaojian传参进来的应该为 "查询",这里是为了提高函数的复用性。 
      Points *findPoint(STUDENTS stu[],int sum,int choice,char tiaojian[])
      {
      	int i,j=0; Points *p,*q,*r; q=(Points *)malloc(sizeof(Points));r=q;
       	int num,age,dorm;char classs[20],sex[5],name[20];
    
        printf("     \n\n请输入您要查找的学生的%s",tiaojian);
       	switch(choice)
    	{
    		case 1: scanf("%d",&num);
    				for(i=0;i<sum;i++)
    					if(num==stu[i].num)
    						r=connectPoint(r,p,i);
    				break;
    		case 2: scanf("%s",name);for(i=0;i<sum;i++)if(strcmp(name,stu[i].name)==0)r=connectPoint(r,p,i);break;
    		case 3: scanf("%s",sex);for(i=0;i<sum;i++)if(strcmp(sex,stu[i].sex)==0)r=connectPoint(r,p,i);break;
    		case 4: scanf("%d",&age);for(i=0;i<sum;i++)if(age==stu[i].age)r=connectPoint(r,p,i);break;
    		case 5: scanf("%s",classs);for(i=0;i<sum;i++)if(strcmp(classs,stu[i].studentclass)==0)r=connectPoint(r,p,i);break;
    		case 6: scanf("%d",&dorm);for(i=0;i<sum;i++)if(dorm==stu[i].dorm)r=connectPoint(r,p,i);break;
    	}
    	  
    	r->points=NULL;
    	
     	return q;
      	
      } 
      
     
    
    // 
    
    
    
    /*查询学生信息*/
    void inquire(STUDENTS stu[],int sum) {
    	
    	int choice;
    	Points *p;
    		
    	do{
    	system("cls");
    	printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
        printf("                   ▄                                ▄\n");
        printf("                   ▄        查询学生宿舍信息        ▄\n");
        printf("                   ▄                                ▄\n");
        printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    
    	button: 
    	choice=selectChoice(chaxun);
    	
    	system("cls");
    	
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        查询学生宿舍信息        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       
    	
    switch里面不能调用排序功能,为什么?????????	
    	switch(choice)
    	{
    		case 1:p=findPoint(stu,sum,choice,xuehao);break;
    		case 2:p=findPoint(stu,sum,choice,xingming);break;
    		case 3:p=findPoint(stu,sum,choice,xingbie);break;
    		case 4:p=findPoint(stu,sum,choice,nianling);break;
    		case 5:p=findPoint(stu,sum,choice,banji);break;
    		case 6:p=findPoint(stu,sum,choice,sushe);break;
    		case 0:return; 
    		default :printf("请输入正确的指令");goto button;//不断循环;	
    	}
    	
    	if(p->points!=NULL)
    	{
    		p=p->points;
    		
    		printHead();
    		
    		while(p!=NULL)
    		{
    			printSearch(stu,p->a);
    			p=p->points;
    		}		
    	}
    	else
    		printfNotFound();
    	//选择操作 
    		selectOperate();	
    	}while(a);
    	
    }
     
      
      //二分法只适用于查找一个     目前只有学号,姓名,宿舍排序 
       Points *findPoint2(STUDENTS stu[],int sum,int choice,char tiaojian[])
      {
      	int i,j=0; Points *p,*q,*r; q=(Points *)malloc(sizeof(Points));r=q;
       	int num,age,dorm;char classs[20],sex[5],name[20];
    
    
    
        printf("     \n\n请输入您要查找的学生的%s",tiaojian);
        
        	switch(choice)
    	{
    		case 1: scanf("%d",&num);break;
    		case 2: scanf("%s",name);break;
    		case 3: scanf("%d",&dorm);break;
    	}
    	
    	
    	int flag=0;
      	int low=0,high=sum-1,mid;
      	while(low<=high){
      		mid=(low+high)/2;
      	
      	
      	switch(choice)
    	{
    		case 1:if(num==stu[mid].num){r=connectPoint(r,p,mid);printf("mid==%d",mid);flag=1;} 
    				else if(stu[mid].num>num)high=mid-1;else low=mid+1;
    				break;
    		case 2: if(strcmp(name,stu[mid].name)==0){r=connectPoint(r,p,mid);flag=1;} if(strcmp(stu[mid].name,name)>0)high=mid-1;else low=mid+1;break;
    		case 3: if(dorm==stu[mid].dorm){r=connectPoint(r,p,mid);flag=1;} if(stu[mid].dorm>dorm)high=mid-1;else low=mid+1;break;
    	}
    	//如果找到,就跳出循环 
      	if(flag)
      		break;
      		
      	}	
        	  
    	r->points=NULL;
    	
     	return q;
      	
      } 
    
    
    /*二分法查询学生信息*/
    void inquire2(STUDENTS stu[],int sum) {
    	STUDENTS stup1[1000];//引用,把排好序的放在这里,不跟原来的混淆 
    	STUDENTS stup2[1000];//引用,把排好序的放在这里,不跟原来的混淆 
    	STUDENTS stup3[1000];//引用,把排好序的放在这里,不跟原来的混淆 
    	//二分法得先排序 
    	sortByNum(stu,sum,stup1);
    	sortByName(stu,sum,stup2);
    	sortByDorm(stu,sum,stup3);
    	
    	int choice;
    	Points *p;
    	
    	
    	do{
    	system("cls");
    	printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
        printf("                   ▄                                ▄\n");
        printf("                   ▄        查询学生宿舍信息        ▄\n");
        printf("                   ▄                                ▄\n");
        printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    
    	button: 
    	 printf("\n\n\n     ********您想根据哪个条件查询********\n\n");
         printf("                1. 学号\n\n");
         printf("                2. 姓名\n\n");
         printf("                3. 宿舍号\n\n");
         printf("                0. 返回主菜单\n\n");
         printf("                 请选择(0-3):");
        scanf("%d",&choice);
    	
    	system("cls");
    	
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        查询学生宿舍信息        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       
    	
    switch里面不能调用排序功能,为什么?????????	
    	switch(choice)
    	{
    		case 1:p=findPoint2(stup1,sum,choice,xuehao);break;//二分法查询 
    		case 2:p=findPoint2(stup2,sum,choice,xingming);break;//二分法查询 
    		case 3:p=findPoint2(stup3,sum,choice,sushe);break;//二分法查询 
    		case 0:return; 
    		default :printf("请输入正确的指令");goto button;//不断循环;	
    	}
    	
    	if(p->points!=NULL)
    	{
    		p=p->points;
    		
    		printHead();
    		
    		while(p!=NULL)
    		{
    			if(choice==1) {
    			printSearch(stup1,p->a);
    			p=p->points;}
    			if(choice==2) {
    			printSearch(stup2,p->a);
    			p=p->points;}
    			if(choice==3) {
    			printSearch(stup3,p->a);
    			p=p->points;}
    		}		
    	}
    	else
    		printfNotFound();
    	//选择操作 
    		selectOperate();	
    	}while(a);
    	
    }
    
    
    //修改和删除判断输入学生个数 
    int operateNum(int sum){
    	int n;
    	printf("请输入你要操作的学生的个数:");
       scanf("%d",&n);
       if(n>sum)
       {
    	printf("\n\n	输入学生个数超过总量,操作失败\n");
    	selectOperate();
    	return 0;
       }
       else if(n<=0)
       	{ 
    	printf("\n\n	输入学生个数不能小于或等于0,操作失败\n");
    	selectOperate();
    	return 0;
       }
       return n;
    } 
    
    
    
    /*只能根据学号删除学生信息*/
    
    void exchangeData(STUDENTS *stu1,STUDENTS *stu2);
    
    //返回总数 
    int deletel(STUDENTS stu[],int sum)
      { 
      a=1;
        system("cls"); 
       int i,j=0,n=0,flag=1;
       Points *p;  
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        删除学生宿舍信息        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
         
       while(n==0)//这里接收到的两个数,n判断学生个数,a判断是否返回主菜单 
       {
       	n=operateNum(sum);
       	//选择操作 
    	if(a==0)
    		return sum;  //0就返回主菜单	
       }	 
         
       do{  
       
       if(flag){
       
       system("cls"); 
        Points *p;  
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        删除学生宿舍信息        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    	}
    	
       //查一个删一个 
      	p=findPoint(stu,sum,1,xuehao); 
      	p=p->points;
    	if(p!=NULL)   
    	{	
    		i=p->a;		
    		//把后面的一次覆盖掉前面一个 
    		for(;i<sum-1;i++)
    			exchangeData(&stu[i],&stu[i+1]);
    
    		printf("删除成功\n");
    		flag=0;
    		j++;
    		if(j==n)
    		{
    			printf("\n\n删除操作已完成\n");
    			//选择操作 
    			selectOperate();
    			if(a==0)
    				return sum-n;
    			else 
    				deletel(stu,sum-n);
    		}
    	} 
    	else{
    		printf("输入的学号不存在,操作失败\n");
    		
    		//选择操作 
    		selectOperate();
    		if(a==0)
    			return sum-j;	
    	}
    	}while(a==1&&j<n);
    
    }
    
    
    
    /*只能根据学号修改学生信息*/
    
    void change(STUDENTS stu[],int sum)
      {  
    	 int choice;
          Points *p;
          
        do{
          system("cls");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        修改学生宿舍信息        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    	  p=findPoint(stu,sum,1,xuehao);
    		
    	  p=p->points;
    	  
        if(p!=NULL)
        {
        	system("cls");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▄        修改学生宿舍信息        ▄\n");
       printf("                   ▄                                ▄\n");
       printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
        	
        	int i=p->a;
        	
    		print(stu,i);
    		button:
    		choice=selectChoice(xiugai);
    		 
    		 switch(choice)		
    		 {
    		  case 1:printf("\n   请输入你改的新学号");scanf("%d",&stu[i].num); break;
    		  case 2:printf("\n   请输入你改的新姓名");scanf("%s",stu[i].name); break;
    		  case 3:printf("\n   请输入你改的新性别");scanf("%s",stu[i].sex);  break;
    		  case 4:printf("\n   请输入你改的新年龄");scanf("%d",&stu[i].age);  break;
    		  case 5:printf("\n   请输入你改的新班级");scanf("%s",stu[i].studentclass); break;
    		  case 6:printf("\n   请输入你改的新宿舍");scanf("%d",&stu[i].dorm); break;
    		  case 0:return; 
    		  default :printf("请输入正确的指令");goto button;		  
    		 }
    		  
    		  printf("\n   修改成功:");
    		  print(stu,i);					
    	}
    	else	
    		printfNotFound();
    		
    	 //选择操作 
    	selectOperate();
    		if(a==0)
    			return;
    	}while(a);
    }
    
    
    
    void pagedis()
    {
       printf(" \n\n\n                   **********************************\n");
       printf("                   *                                *\n");
       printf("                   *                                *\n");
       printf("                   *                                *\n");
       printf("                   *  欢迎进入学生宿舍信息管理系统  *\n");
       printf("                   *                                *\n");
       printf("                   *                                *\n");
       printf("                   *                                *\n");
       printf("                   **********************************\n");
    }
    //欢迎 
    void welcome(){
    	
    			char heart[30][150]={
            "                           ************                           ************",
            "                        ******************         	        ******************",
            "                    ******************#*******        	    **************************",		
            "                 **********************#*********       ********************************",
            "                **********************##########***   **************#********************  ",
            "               **********************#*********#**** **##********#************************   ",
            "               *********##########**#****#****#**********##****#**************************  ",
            "               **********#*******#*#*****#***#***************#********#########***********  ",
            "                **********#*****#********#***********#####***#********#*******#**********  ",
            "                 ***********#***#********#***************#***#******#*#****#**#*********  ",
            "                  ***********##**********#**************#*****#****#***#*****#*#*******   ",
            "                   **********##*********#*#************#*****####*****#*******#*******  ",
            "                    ********#**#*******#***#************#*************#**************    ",
            "                      *****#****#*****#*****#************#************#************    ",
            "                        **#**********#*******#******######************#**********     ",
            "                          **********#*********#*****###########################     ",
            "                            **************************************************      ",
            "                              **********************************************     ",
            "                                ******************************************     ",
            "                                  **************************************    ",
            "                                    **********************************      ",
            "                                      ******************************   ",
            "                                        **************************   ",
            "                                          **********************  ",
            "                                            ******************  ",
            "                                              **************      ",
            "                                                **********       ",
            "                                                  ******    ",
            "                                                    **  "
    		};
    		
        int i;
        for(i=0;i<29;i++)   //逐行打印
            printf("%s\n",heart[i]);
    }
    
    
    
    void bye(){
    	system("cls");
    			char heart[11][150]={
    "\t\t  _____   _                        _             ",
    "\t\t |_   _| | |_     __ _    _ _     | |__    ___     o O O   ",
    "\t\t   | |   | ' \\   / _` |  | ' \\    | / /   (_-<    o        ",
    "\t\t  _|_|_  |_||_|  \\__,_|  |_||_|   |_\\_\\   /__/_   TS__[O]  ",
    "\t\t_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"| {======| ",
    "\t\t\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'./o--000'  "			
    };
    		
       int i;
       printf("\n\n");
        for(i=0;i<6;i++)   //逐行打印
            printf("%s\n",heart[i]);
    }
    
    void designer(){
            printf("\n\n\t\t☆☆☆☆☆☆☆☆★★设计者信息★★☆☆☆☆☆☆☆☆\n\n");
            printf("\t\t	●●	                         ●●\n\n");
            printf("\t\t	●●	姓名:xxxx               ●●\n\n");
            printf("\t\t	●●	                         ●●\n\n");
            printf("\t\t	●●	班级:xxxxxxx            ●●\n\n");
            printf("\t\t	●●	                         ●●\n\n");
            printf("\t\t	●●	学号: xxxxxxxxxxxx      ●●\n\n");
            printf("\t\t	●●	                         ●●\n\n");
            printf("\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
    }
    
    void check()
    {
       char userName[5];/*用户名*/
    
       char userPWD[5];/*密码*/
    
       int i;
    
       system("color 5E");
    
       for(i = 1; i < 4; i++)
       {
          /*用户名和密码均为123;*/
      	
            printf("\n       请输入您的用户名(123):");
    
            gets(userName);
    
            printf("\n       请输入您的密码(123):");
    
            gets(userPWD);
    
            if ((strcmp(userName,"123")==0) && (strcmp(userPWD,"123")==0))/*验证用户名和密码*/
            {
                
                system("cls");
                welcome();
                 printf("\n      3秒后自动跳转");
                Sleep(3000); 
                return;
            }
            else
            {
                if (i < 3)
                    printf("用户名或密码错误,请重新输入!");
                else
                {
                    printf("您已连续3次将用户名或密码输错,系统将退出!");
                    exit(1); 
                }
            }
       }
    
    }
    
    
    void menu()
    {
    		
    	
      STUDENTS stu[20];
      int choice,sum;
      
      sum=read_file(stu);	
      	
      if(sum==0)
       {  
       	 printf("首先录入基本库存信息!按回车后进入*****\n");
         getch();
         
    	 sum=input(stu,sum);
       }
    
    	system("cls");
    
      do
      {  
        system("cls"); 
        
         button:	 	 
         printf("\n\n\n               ********学生宿舍信息管理系统********\n\n");
         printf("                      1. 创建学生宿舍信息\n\n");
         printf("                      2. 打印学生宿舍信息\n\n");
    	 printf("                      3. 查询学生宿舍信息\n\n");
         printf("                      4. 修改学生宿舍信息\n\n");
         printf("                      5. 删除学生宿舍信息\n\n");
         printf("                      6. 学生宿舍信息排序\n\n");    
         printf("                      0. 退出系统\n\n");
         printf("                       请选择(0-6):");
         
         scanf("%d",&choice);  
      
    	   
        switch(choice)
        {	  
          case 1: sum=input(stu,sum); break;/*创建学生信息*/
          case 2: output(stu,sum) ; break;/*打印学生信息*/
          case 3: inquire(stu,sum); break;/*查询学生信息*/
          case 4: change(stu,sum); break;/*修改学生信息*/
          case 5: sum=deletel(stu,sum);break;/*删除学生信息*/
          case 6: sortStudent(stu,sum); break;/*学生信息顺序*/    
          case 0:  bye();designer();break;
          default:system("cls"); printf("\n		请输入正确的指令!\n");goto button;
        }
    
      }while(choice!=0);
    
      save_file(stu,sum);
    }
    
    
    int main()
    {  
      	 pagedis();
    
    	 check();
    
    	 menu();   
    
      return 0;
    
    }
    
    
    
    展开全文
  • 主要为大家详细介绍了C语言学生信息管理系统设计与实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C语言-学生管理系统

    2011-06-30 20:26:13
    C语言课程设计,关于学生管理系统的的实验设计
  • c语言学生管理系统

    2011-11-01 21:34:11
    学生管理系统c语言设计的,希望能给大家一个参考
  • C语言学生成绩管理系统内含设计文档 C语言学生成绩管理系统内含设计文档 C语言学生成绩管理系统内含设计文档
  • C语言课程设计 学生管理系统 学号 姓名 语文 数学 英语
  • C语言学生管理系统程序设计基础报告(源码+报告)
  • C语言学生成绩管理系统课程设计报告
  • 学生信息管理系统c语言课程设计,含报告书,源程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,949
精华内容 779
关键字:

c语言设计学生管理系统

c语言 订阅