C语言实现宿舍管理系统课程设计

宿舍管理系统C语言源码,供大家参考,具体内容如下

内容摘要

学生宿舍管理系统时应对学生宿舍管理的现代化、网络化,逐步摆脱学生宿舍管理的人工管理方式,提高学生宿舍管理效率而开发的,它包括了对学生宿舍基本信息管理,其功能包括对这些基本信息的增、删、改、查等基本功能,并将这些功能与文件读写相结合形成文档使管理者一目了然,也适合长时间的保存,数据不容易丢失;其中在输出时穿插着冒泡排序、希尔排序、折半拆入排序、二分查找等算法,按顺序输出学生信息等。综上,这无疑为信息的管理存储提供了一个方便、快捷的操作方式。

关键词

二分查找、排序算法及分析、文件操作

系统概览

开发工具

Visual C++ 6.0

函数功能

源码

#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    ●●    姓名:             ●●\n\n");
        printf("\t\t    ●●                             ●●\n\n");
        printf("\t\t    ●●    班级:        ●●\n\n");
        printf("\t\t    ●●                             ●●\n\n");
        printf("\t\t    ●●    学号:   ●●\n\n");
        printf("\t\t    ●●                             ●●\n\n");
        printf("\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
}

void check()
{
   char userName[5];/*用户名*/

   char userPWD[5];/*密码*/

   int i;

   system("color 3C");

   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;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现学生宿舍管理系统

    本文实例为大家分享了C语言实现学生宿舍管理系统的具体代码,供大家参考,具体内容如下 实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号.房间号.面积.所容纳人数.已入住人数等,系统以文本菜单形式工作. 登录时:用户名为asd 密码任意 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <ctype.h> #include

  • C语言实现学生宿舍信息管理系统

    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 功能描述 该学生宿舍信息管理系统主要实现的功能有:创建学生宿舍信息,显示学生宿舍信息,查询学生宿舍信息,修改学生宿舍信息,删除学生宿舍信息,保存学生宿舍信息,读取学生宿舍信息.其系统功能模块图如下: 完整代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #incl

  • C++实现学生宿舍管理系统

    本文实例为大家分享了C++实现学生宿舍管理系统的具体代码,供大家参考,具体内容如下 非常简易,完成个作业够用,仅供初学者参考,不喜勿喷. #include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> /*先用结构体定义学生信息*/ struct stud  {     int   num;            //学号      char  name[10];     

  • C语言实现宿舍管理系统设计

    本文实例为大家分享了C语言实现宿舍管理系统的具体代码,供大家参考,具体内容如下 设计目的 <数据结构>课程主要介绍最常用的数据结构,进行数据结构课程设计要达到以下目的: (1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力:(2)初步掌握软件开发过程的问题分析.系统设计.程序编码.测试等基本方法和技能:(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力:(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风. 任务概述

  • C语言实现宿舍管理系统课程设计

    宿舍管理系统C语言源码,供大家参考,具体内容如下 内容摘要 学生宿舍管理系统时应对学生宿舍管理的现代化.网络化,逐步摆脱学生宿舍管理的人工管理方式,提高学生宿舍管理效率而开发的,它包括了对学生宿舍基本信息管理,其功能包括对这些基本信息的增.删.改.查等基本功能,并将这些功能与文件读写相结合形成文档使管理者一目了然,也适合长时间的保存,数据不容易丢失:其中在输出时穿插着冒泡排序.希尔排序.折半拆入排序.二分查找等算法,按顺序输出学生信息等.综上,这无疑为信息的管理存储提供了一个方便.快捷的操作方式

  • C语言学生成绩管理系统课程设计

    学生成绩管理系统是比较适合初学者的.它涵盖了c语言几乎知识.对于学了c语言的人,把这个课程设计搞好(当然自己能设计出来是要有很好的基础).不管自己能不能够完成,最重要的是能弄懂.参考其他资料,试着自己编写是不错的选择.这个课程设计也是我参照资料,自己编写的.自己适当地增加了一些功能.不过,编的不够那么专业吧. #include<stdio.h> #include<string.h> #include<stdlib.h> #define size 100 char* cl

  • C语言学生成绩管理系统课程设计word版

    一份C语言学生成绩管理系统设计报告,分享给大家 一.课程设计题目 <学生成绩管理系统设计> 二.实训目的 (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法. (2)掌握C++的基本概念和基础知识. (3)通过训练能够读懂较为复杂的C++语言源程序并具备基本C++语言程序设计的能力. (4)通过实训,培养自己编写.调试.分析程序的能力. (5)培养自己独立解决问题,查找资料的能力.同学之间相互帮助,相互交流,相互合作的团队精神. (6) 培养自己良好的学习兴趣,独立的

  • C语言实现电话簿管理系统课程设计

    本文实例为大家分享了C语言课程设计:电话簿管理系统,供大家参考,具体内容如下 文件目录: 初始界面 现在显示一部分代码: //添加联系人 void add() { int i; FILE *fp1;//定义文件指针fp1,使其指向电话簿文本文件 fp1=fopen("电话簿.txt","a+"); printf("请输入要增加的联系人的个数:"); scanf("%d",&n); for(i=num;i<num+

  • C语言实现宾馆管理系统课程设计

    本文实例为大家分享了C语言实现宾馆管理系统的具体代码,供大家参考,具体内容如下 课程设计题目: 宾馆管理系统 一.需求分析 近年来,科技进步不仅促进了全球旅游企业的快速增长,而且指导了旅游者消费观念的 更新,其中信息与通信技术的发展对酒店等企业有着深远的影响,传统的管理方式已不 能满足具有信息量大,查询量大,保存期长,要求不间断运行等特点的宾馆管理需求, 重视信息技术的发展成为我国酒店业的共识.为增强竞争能力,提高管理水平,先进的 宾馆管理系统已成为必然.宾馆管理系统可以及时了解客户信息与需求,

  • C语言实现销售管理系统课程设计

    本文实例为大家分享了C语言实现销售管理系统的具体代码,供大家参考,具体内容如下 一.C程序设计课程设计题目简介 该设计要求学生以某公司销售管理业务为背景,设计.开发一套“销售管理系统”软件. 通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格.得到软件工程的综合训练,提高解决实际问题的能力. 二.C程序设计课程设计的任务 1.查阅文献资料,一般在5篇

  • C语言实现学籍管理系统课程设计

    本文实例为大家分享了C语言实现学籍管理系统的具体代码,供大家参考,具体内容如下 学校的课程设计,自己完成后整理了一下.自己用链表实现的一个较简单的学籍管理系统,都是通过一些链表以及文件的基本操作完成. 功能实现 1-录入学生信息.2-查询学生信息.3-修改学生信息 .4-删除学生信息.5-显示学生信息.6-统计信息报表.7-读盘,存盘. 注:一些getchar()以及换行符是我为了让界面美观自己加的. #include<stdio.h> #include<stdlib.h> #in

  • C语言实现宿舍管理课程设计

    本文实例为大家分享了C语言实现宿舍管理的具体代码,供大家参考,具体内容如下 和本编前几个程序结构差不多,比较简单直观,希望可以给你带来帮助. #include <stdio.h> #include <stdlib.h> #include <string.h> #include<Windows.h> typedef struct student {     int might1;     int might2;     char user[20];//账号  

  • C语言实现图书管理系统课程设计

    目录 设计要求 实现代码 运行结果 本文实例为大家分享了C语言实现图书管理系统的具体代码,供大家参考,具体内容如下 设计要求 设计图书管理系统 要求如下: 1.对书名,作者,编号,出版单位,出版日期,类别,存放位置进行添加.删除.修改2.查询相关信息3.保存所有信息 实现代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> typedef struct

  • C语言学生学籍管理系统课程设计

    C语言学生学籍管理系统做了好长时间的,里面有点小问题,希望大佬找到并帮忙改改,注意输入密码三次错误会自动注销用户,密码123456 代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> struct student { char xuehao[100];//输入学号 char name[100];//输入姓名 char sex[100];//输入性别 int

随机推荐