精华内容
下载资源
问答
  • printf("\n\n\n\t\t 欢迎进入学生宿舍管理系统\n"); printf("\t\t*********************************\n"); printf("\t\t1.输入床位信息\n"); printf("\t\t2.根据学号,显示学生住宿信息\n"); printf("\t\t3.根据...

    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<string.h>
    #include<windows.h>
    #include <malloc.h>
    #include<dos.h>
    #define len sizeof(struct dorminfo)
    #define Max 100
    int a[Max]={0};
    int length;
    void showmenu();
    void processmenu();
    void create();
    void display();
    void disbed();
    void modify();
    void del();
    void save();
    void read();
    typedef struct
    {
    int dormno;
    int bedno;
    int isstay;
    }bedinfo;
    struct dorminfo
    {
    bedinfo bed;
    int stuno;
    char name[20];
    char stucla[20];
    int year;
    int month;
    struct dorminfo *next;
    };
    struct dorminfo *head=NULL,*p1,*p2,*p3;

    void showmenu()
    {
    printf("\n\n\n\t\t 欢迎进入学生宿舍管理系统\n");
    printf("\t\t*********************************\n");
    printf("\t\t1.输入床位信息\n");
    printf("\t\t2.根据学号,显示学生住宿信息\n");
    printf("\t\t3.根据宿舍号,显示住宿信息\n");
    printf("\t\t4.根据宿舍号、床位号,修改住宿信息\n");
    printf("\t\t5.根据宿舍号、床位号,删除住宿信息\n");
    printf("\t\t6.保存学生宿舍信息\n");
    printf("\t\t7.从文件读入学生信息\n");
    printf("\t\t8.退出 \n");
    printf("\t\t********************************\n") ;
    }
    void processmenu()
    {
    int caidan;
    printf("请输入您的选项<1~8>:");
    scanf("%d",&caidan);
    if(caidan>8||caidan<0)
    {
    printf("对不起,您输入的选项有误,请重新输入!");
    scanf("%d",&caidan);
    }
    switch(caidan)
    {
    case 1:create();break;
    case 2:display();break;
    case 3:disbed();break;
    case 4:modify();break;
    case 5:del();break;
    case 6:save();break;
    case 7:read();break;
    case 8:exit(0);
    }
    }
    void create()
    {
    int j;
    char ch;
    length=0;
    p1=(struct dorminfo *)malloc(len);
    if(head==NULL)
    head=p1;
    printf("开始输入床位信息....\n");
    Sleep(500);
    do
    {
    p2=(struct dorminfo *)malloc(len);
    printf("请输入宿舍号:");
    scanf("%d",&p2->bed.dormno);
    printf("请输入床号:");
    scanf("%d",&p2->bed.bedno);
    printf("是否有人居住(1/0):");
    scanf("%d",&p2->bed.isstay);
    printf("请输入学生学号:");
    scanf("%d",&p2->stuno);
    a[length]=p2->stuno;
    if(length>1)
    {
    for(j=1;j<length;j++)
    {
    if(a[length]==a[j])
    {
    printf("该床位号已存在,请重新输入:");
    scanf("%d",&p2->bed.bedno);}
    }
    }
    printf("请输入学生姓名:");
    scanf("%s",p2->name);
    printf("请输入学生班级:");
    scanf("%s",p2->stucla);
    printf("请输入学生入住时间(年 月)<如2015 5>:");
    scanf("%d%d",&p2->year,&p2->month);
    if(p2->year<1000||p2->year>9999||p2->month>12||p2->month<1)
    {
    printf("对不起,输入错误,请重新输入!\n");
    scanf("%d%d\n",&p2->year,&p2->month);
    }
    length++;
    p1->next=p2;
    p2->next=NULL;
    p1=p1->next;
    printf("第%d个住宿信息创建成功!\n",length);
    Sleep(300);
    fflush(stdin);
    printf("是否继续添加住宿信息?<y/Y>");
    ch=getchar();
    } while(ch=='y'||ch=='Y');
    }
    void display()
    {
    int flag=0,No;
    p3=head->next;
    printf("请输入学号:");
    scanf("%d",&No);
    while(p3!=NULL)
    {
    if(p3->stuno==No)
    {
    printf("\n住宿信息如下:");
    printf("\n宿舍号:%d",p3->bed.dormno);
    printf("\n床位号:%d",p3->bed.bedno);
    printf("\n是否有人入住:%d",p3->bed.isstay);
    printf("\n学生学号:%d",p3->stuno);
    printf("\n学生姓名:%s",p3->name);
    printf("\n学生班级:%s",p3->stucla);
    printf("\n入住时间为:%d年%d月\n",p3->year,p3->month);
    flag=1;
    }
    p3=p3->next;
    }
    if(!flag)
    printf("没有找到该学生住宿信息!\n");
    }
    void disbed()
    {
    int flag=0,DormNo;
    p3=head->next;
    printf("请输入宿舍号:");
    scanf("%d",&DormNo);
    while(p3!=NULL)
    {
    if(p3->bed.dormno==DormNo)
    {
    printf("\n住宿信息如下:");
    printf("\n宿舍号:%d",p3->bed.dormno);
    printf("\n床位号:%d",p3->bed.bedno);
    printf("\n是否有人入住:%d",p3->bed.isstay);
    printf("\n学生学号:%d",p3->stuno);
    printf("\n学生姓名:%s",p3->name);
    printf("\n学生班级:%s",p3->stucla);
    printf("\n入住时间为:%d年%d月\n",p3->year,p3->month);
    flag=1;
    }
    p3=p3->next;
    }
    if(!flag)
    printf("没有找到该学生住宿信息!\n");
    }
    void modify()
    {
    struct dorminfo *p;
    int DormNo,BedNo,flag;
    int Dormno,Bedno,Isstay,Stuno,Year,Month;
    char Name[20],Stucla[20];
    if(head==NULL){
    printf("住宿信息为空,不能修改,按任意键返回...\n");
    getch();
    system("cls");
    return ;
    }
    p1=p3=head;
    printf("请输入宿舍号、床位号:");
    scanf("%d %d",&DormNo,&BedNo);
    while(p3!=NULL)
    {
    if(p3->bed.dormno==DormNo&&p3->bed.bedno==BedNo)
    {
    printf("已找到要修改的宿舍号、床位号!\n");
    flag=1;
    p=p3;
    Sleep(1000);
    }
    p3=p3->next;
    }
    if(flag)
    {
    printf("请输入修改后的宿舍号:");
    scanf("%d",&Dormno);
    printf("请输入修改后的床号:");
    scanf("%d",&Bedno);
    printf("是否有人居住(1/0):");
    scanf("%d",&Isstay);
    printf("请输入修改后的学生学号:");
    scanf("%d",&Stuno);
    while(p1!=NULL)
    {
    if(p1->stuno==Stuno){
    printf("该床位号已存在,请重新输入:");
    scanf("%d",&Stuno);
    }
    p1=p1->next;
    }
    printf("请输入修改后的学生姓名:");
    scanf("%s",Name);
    printf("请输入修改后的学生班级:");
    scanf("%s",Stucla);
    printf("请输入修改后的学生入住时间(年月)<如2015 5>:");
    scanf("%d%d",&Year,&Month);
    if(Year<1000||Year>9999||Month>12||Month<1)
    {
    printf("对不起,输入错误,请重新输入!\n");
    scanf("%d%d",&Year,&Month);
    }
    p->bed.dormno=Dormno;
    p->bed.bedno=Bedno;
    p->bed.isstay=Isstay;
    p->stuno=Stuno;
    strcpy(p->name,Name);
    strcpy(p->stucla,Stucla);
    p->year=Year;
    p->month=Month;
    printf("修改成功,信息如下:\n");
    printf("-宿舍号--床号--有无人入住--学号--姓名--班级--入住时间(年月)");
    printf("\n");
    printf("%6d%5d%8d%9d%7s%8s%9d%2d\n",p->bed.dormno,p->bed.bedno,p->bed.isstay,p->stuno,p->name,p->stucla,p->year,p->month);
    }
    else
    {
    printf("没有找到该宿舍号与床号信息,按任意键返回...\n");
    getch();
    system("cls");
    return ;
    }
    }
    void del()
    {
    int DormNo,BedNo;
    p1=head,p2=head->next;
    printf("请输入宿舍号、床位号:");
    scanf("%d %d",&DormNo,&BedNo);
    while(p2!=NULL)
    {
    if(p2->bed.dormno==DormNo&&p2->bed.bedno==BedNo)
    {
    p1->next=p2->next;
    free(p2);
    length--;
    printf("删除成功!\n");
    system("cls");
    return ;
    }
    p2=p2->next;
    p1=p1->next;
    }
    if(p1==NULL)
    printf("找不到要删除的宿舍号、床位号!\n");
    }
    void save()
    {
    FILE *fp1;
    if(head==NULL)
    {
    printf("\n,没有找到该宿舍号与床号信息,按任意键返回....");
    getch();
    system("cls");
    return ;
    }
    if((fp1=fopen("学生宿舍管理系统.txt","w"))==NULL)
    {
    printf("\n信息无法保存,按任意键返回....");
    getch();
    system("cls");
    return ;
    }
    p1=head->next;
    printf("正在保存文件...\n");
    Sleep(800);
    fputs(" 宿舍号 床号 有无人入住 学号 姓名 班级 入住时间(年月) :\n",fp1);
    while(p1!=NULL)
    {
    fprintf(fp1,"%6d%5d%8d%7d%6s%4s%7d%2d\n",p1->bed.dormno,p1->bed.bedno,p1->bed.isstay,p1->stuno,p1->name,p1->stucla,p1->year,p1->month);
    p1=p1->next;
    }
    fclose(fp1);
    printf("文件保存成功!\n");
    printf("按任意键返回...\n");
    getch();
    system("cls");
    return ;
    }
    void read()
    {
    FILE *fp2;
    char ch;
    if((fp2=fopen("学生宿舍管理系统.txt","r"))==NULL)
    {
    printf("文件无法打开!\n");
    exit(0);
    }
    printf("正在读入文件...\n");
    Sleep(1000);
    ch=fgetc(fp2);
    while(!feof(fp2))
    {
    putchar(ch);
    ch=fgetc(fp2);
    }
    printf("\n");
    fclose(fp2);
    printf("文件读入成功!\n");
    }
    void main()
    {
    while(1)
    {
    showmenu();
    processmenu();
    system("pause");
    system("cls");
    }
    }

    转载于:https://www.cnblogs.com/jinmo/p/8535372.html

    展开全文
  • 这是我用C语言写的一个宿舍管理系统,可以实现1、宿舍信息录入 2、学生信息录入 3、删除某个宿舍 4、删除某个学生 5、宿舍信息浏览 6、学生信息浏览 7、宿舍信息修改 8、学生信息修改这些功能,附有可执行文件
  • 关于c语言学生宿舍管理系统

    万次阅读 多人点赞 2016-05-18 13:07:39
    老师先发给我们一个学生信息管理系统C语言代码,这是我目前接触到的最长的代码,密密麻麻,看的眼晕,接下来老师为我们细致地讲解了这个程序的结构,让我们了解到程序是如何执行的,我们明白后,老师发布了任务...

    学生信息管理系统中,需要同时保存一个学生的姓名,性别,年龄等信息,那么设置变量保存很多同学的这些信息就有点不太方便。类似一个登记本,每一页只能写名字,如果你要登记其他的信息,又要添加一个登记本,只能写性别,如果登记年龄,又要添加一个登记本,只能写年龄,….,多么的不方便,还容易混乱。解决的方法你一定想,多么简单,一个登记本一页中,同时写姓名,性别,年龄不就行了吗?C语言也是这样,如果定义一种形式,一个变量同时记录很多的信息,这样在管理系统中,就方便很多了。这就是结构体。


    结构体首先要定义,因为每个程序用到的组合在一起的信息不一样,例如学生信息管理系统中,可能要将学号、姓名、性别、年龄、班级组合到一起,所以 第一行用struct告诉程序,下面是一个结构体,后面的stu是这个结构体的类型,类似整数用int表示,这个stu是你自己起的名字。

    学生信息管理系统一共用到了三个函数

    int main()

      inti,sum;

     pagedis();//欢迎页面

     check();//验证用户名和口令

     menu();//菜单

    }

    第一个是显示欢迎页面,第二个是验证用户名和口令,第三个是显示菜单,并根据用户的输入选择执行相应的操作。

    还有一些其他的函数,分别是menu()菜单函数调用的子函数。

    结构话程序后大概的形式就是这样

     

    #include<stdio.h>

    void pagedis();

    void check();

    void menu();

    int main()

    {

     pagedis();

     check();

     menu(); 

    }

    void pagedis(){

            printf("。。 \n");

    }

    void check(){

            printf("。。 \n");

    }

    void menu(){

            printf(" 。。\n");

    }

     

    这就是结构化程序设计,把功能放到函数中,下一步就可以集中精力,完善函数中的内容。



    学生成绩管理系统:

    #include<stdio.h>


    #include<stdlib.h>


    #include<string.h>


    #define SIZE 3 /*定义常量SIZE便于以后的修改*/


    struct student /*定义一个结构体数组存放学生的信息*/


    {


        int number; /*学号*/


        char name[20];/*名字*/


        char xueyuan[20];/*学院*/


        int cla;/*班级*/


        int score[3];/*分数*/


        int sum;/*总分*/


        int average;/*平均分*/


    }stu[SIZE];


     


    void menu();/*调用菜单函数*/


    void write();/*读入信息*/


    void save(int x);/*保存stud.dat文件函数*/


    void SaveOneStudent(int i);/*保存一个学生信息*/


    void SaveAllStudent(int n);/*保存全部学生信息*/


    void inturn (struct student c[]);/*用于对学生的信息按学号排序的函数*/


    void save2();/*将排序后的信息存入student.dat文件中*/


    int AddStudent(int n);/*增加学生信息*/


    void InputOnestudent(int i);/*输入一个同学信息*/


    int DelStudent(int n);/*删除学生信息*/


    void ModifyStudent(int n);/*修改学生信息*/


    void OutputOneStudent(int i);/*查询一个学生信息*/


    void SearchMenu(int n);/*查询学生信息操作*/


    void SearchNumber(int n);/*按学号查询学生信息*/


    void SearchName(int n);/*按姓名查询学生信息*/


    void SearchXueyuan(int n);/*按所在学院查询学生信息*/


    void SearchCla(int n);/*按所在班级查询学生信息*/


    void tongji();/*学生信息统计操作*/


    void tongji2();/*统计不及格率操作*/


    void zfsc();/*总分排序操作*/


    void avecz();/*按平均分统计人数操作*/


    void avecz();/*按平均分统计人数操作*/


    void search();/*查找最高成绩操作*/


    void tongji2();/*统计不及格率操作*/


    void read();/*读取student.dat文件文件中学生的信息*/


     


    /*主函数************************************************************************************/


    void main()


    {


        int n=SIZE;


        int choice;/*用户选择变量*/


        printf("*******************************************************************************\n");


        printf("*                                                                             *\n");


        printf("*          Hwadee            &学生成绩文件管理&          Hwadee               *\n");


        printf("*                                                                             *\n");


        printf("*******************************************************************************\n\n\n");


        printf("******************************●●欢迎使用●●*********************************");


        while (1)


        {


             menu();/*调用菜单函数形成操作界面*/


             printf("请选择:");


             scanf("%d", &choice);


             if ( choice==0 )


             {


                  printf("\t\t\t\t谢谢使用!!!");


                  break;


              }


           switch(choice) /*多重选择实现功能不同的功能*/


           {  


                case 1:


                    write();


                  inturn(stu);


                  save(SIZE);


                    break;


                case 2:


                  AddStudent(n);


                    break;


               case 3:


                  DelStudent(n);


                  break;


               case 4:


                    ModifyStudent(n);


                  break;


               case 5:


                  SearchMenu(n);


                  break;


               case 6:


                  tongji();


                  break;


               case 0:


                  printf("\n谢谢使用!再见!\n");


               default:


                  printf("\n按键错误!请重新选择!\n");


           }/*结束switch*/


        }/*结束while*/


    }


     

    部分程序清单


    /*菜单函数*************************************************************************************/


    void menu()


    {


        printf("************请输入所需操作***********\n");/*选择功能菜单*/


        printf("*************************************\n");


        printf("1.学生成绩写入及排序\n");


        printf("2.增加学生信息\n");


        printf("3.删除学生信息\n");


        printf("4.修改学生信息\n");                             


        printf("5.查询学生信息\n");


        printf("6.学生成绩统计操作\n");


        printf("0.退出系统\n");


        printf("**************************************\n");


    }


     


    /*写入函数*************************************************************************************/


    void write()


    {


        int i;/*计数变量*/


        for(i=0;i<SIZE;i++)


        {


            printf("学号:");


            scanf("%d",&stu[i].number);


            printf("姓名:");


            scanf("%s",&stu[i].number);


            printf("学院:");


            scanf("%s",&stu[i].xueyuan);


            printf("班级:");


            scanf("%d",&stu[i].cla);


            printf("高数:");


            scanf("%d",&stu[i].score[0]);


            printf("英语:");


            scanf("%d",&stu[i].score[1]);


            printf("C语言:");


            scanf("%d",&stu[i].score[2]);


            stu[i].sum=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]);/*计算总成绩*/


            printf("总成绩:%d",stu[i].sum);


            stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*计算平均成绩*/


            printf("平均成绩:%d\n",stu[i].average);


        }


    }





    -------------------------------------------------------------------------------------


    宿舍管理:

    #include<stdio.h>                  

    #include<stdlib.h>

    #include<ctype.h>

    #include<string.h>

    typedef struct                

    {

              char roomnum[4];            

              char bednum[2];              

              char num[10];              

              char name[20];              

                        

    }Student;

    Student room1[1000];            

    int menu_select()          

    {      

     char c;

            do{

                system("cls");              

                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§ 7  查找并显示一个记录                  §\n");

                printf("\t\t§ 8. 从文件中读入数据                    §\n");

                printf("\t\t§ 9. 循环写入数据                        §\n");

                printf("\t\t§ 0. 结束程序                        §\n");

                printf("\t\t----------------------------------------------\n");

                printf("\t\t请选择您要运行的选项按(0-9):");

                c=getchar();                  

               }while(c<'0'||c>'9');

                return(c-'0');                  

    }

    int Input(Student room[],int n)                  

    {int i=0;

    char sign=0,x[10];            

    while(sign!='n'&&sign!='N')          

    {

                 printf("\t\t房间号:");                

                 scanf("\t\t%s",&room[n+i].roomnum);

                 printf("\t\t床位号:");

                 scanf("\t\t%s",&room[n+i].bednum);

                 printf("\t\t学号:");

                 scanf("\t\t%s",&room[n+i].num);

                 printf("\t\t姓名:");

                 scanf("\t\t%s",&room[n+i].name);

                 gets(x);              

                 printf("\t\t是否继续输入?(Y/N)");

                 scanf("\t\t%c",&sign);                

                 i++;

    }

    return(n+i);

    }

    void Display(Student room[],int n)            

    {

    int i;

    printf("\t\t--------------------------------------------------\n");          

    printf("\t\t房间号    床位号    学号      姓名                \n");

    printf("\t\t--------------------------------------------------\n");

    for(i=1;i<n+1;i++)                

    {

        printf("\t\t%-10s%-10s%-10s%-20s\n",room[i-1].roomnum,room[i-1].bednum,room[i-1].num,room[i-1].name);

        if(i>1&&i==0)              

        {printf("\t\t--------------------------------------------------\n");                  

         printf("\t\t");

         system("pause");

         printf("\t\t--------------------------------------------------\n");

        }

    }

    printf("\t\t");

    system("pause");

    }

    void Sort_by_num(Student room[],int n)    

    {

          int i,j,*p,*q,s;

          char t[10];

          for(i=0;i<n-1;i++)                  

             for(j=0;j<n-1-i;j++)

                if(strcmp(room[j].num,room[j+1].num)>0)

                  {

                   strcpy(t,room[j+1].bednum);

                   strcpy(room[j+1].bednum,room[j].bednum);

                   strcpy(room[j].bednum,t);

                   strcpy(t,room[j+1].num);

                   strcpy(room[j+1].num,room[j].num);

                   strcpy(room[j].num,t);

                   strcpy(t,room[j+1].name);

                   strcpy(room[j+1].name,room[j].name);

                   strcpy(room[j].name,t);

      }

             }

    void Sort_by_roomnum(Student room[],int n)  

    {

           int i,j,*p,*q,s;

           char t[10];

           for(i=0;i<n-1;i++)                  

              for(j=0;j<n-1-i;j++)

                 if(strcmp(room[j].roomnum,room[j+1].roomnum)>0)

                   {strcpy(t,room[j+1].roomnum);

                    strcpy(room[j+1].roomnum,room[j].roomnum);

                    strcpy(room[j].roomnum,t);

                    strcpy(t,room[j+1].bednum);

                    strcpy(room[j+1].bednum,room[j].bednum);

                    strcpy(room[j].bednum,t);

                    strcpy(t,room[j+1].num);

                    strcpy(room[j+1].num,room[j].num);

                    strcpy(room[j].num,t);

                    strcpy(t,room[j+1].name);

                    strcpy(room[j+1].name,room[j].name);

                    strcpy(room[j].name,t);

                   }

    }

    int Insert_a_record(Student room[],int n)            

    {char x[100];          

            printf("\t\t学生房间号:");          

            scanf("\t\t%s",&room[n].roomnum);

            printf("\t\t学生床位号:");

            scanf("\t\t%s",&room[n].bednum);

            printf("\t\t学生学号:");

            scanf("\t\t%s",&room[n].num);

            printf("\t\t学生姓名:");

            scanf("\t\t%s",&room[n].name);

            gets(x);

            n++;

            Sort_by_num(room,n);          

            printf("\t\t插入记录成功!\n");          

            return(n);

    }

    int Delete_a_record(Student room[],int n)          

    {

            char s[20];

            int i=0,j;

            printf("\t\t输入他(她)的姓名:");              

            scanf("%s",s);

            while(strcmp(room[i].name,s)!=0&&i<n) i++;          

            if(i==n)

            {

             printf("\t\t对不起没找到该学生!\n");              

             return(n);

            }

            for(j=i;j<n-1;j++)                  

            {

             strcpy(room[j].roomnum,room[j+1].roomnum);

             strcpy(room[j].bednum,room[j+1].bednum); 

             strcpy(room[j].num,room[j+1].num);

             strcpy(room[j].name,room[j+1].name);

            }

             printf("\t\t删除记录成功!\n");          

             return(n-1);

    }

    void Query_a_record(Student room[],int n)                

    {

             char s[20];

             int i=0;

             printf("\t\t输入他(她)的姓名:");                  

             scanf("\t\t%s",&s);

             while(strcmp(room[i].name,s)!=0&&i<n) i++;          

             if(i==n)

             {

              printf("\t\t对不起没找到该学生!\n");              

              return;

             }

              printf("\t\t他(她)的房间号:%s\n",room[i].roomnum);  

              printf("\t\t他(她)的床位号:%s\n",room[i].bednum);

              printf("\t\t他(她)的学号:%s\n",room[i].num);

    }

    int AddfromText(Student room[],int n)              

    {

             int i=0,num;

             FILE *fp;                                    

             char filename[20];                              

             printf("\t\t输入文件名:");

             scanf("\t\t%s",&filename);                    

             if((fp=fopen(filename,"rb"))==NULL)            

             {

              printf("\t\t无法打开该文件\n");        

              printf("\t\t");

              system("pause");

              return(n);

             }

              fscanf(fp,"%d",&num);                  

              while(i<num)                

             {

           fscanf(fp,"%s%s%s%s",room[n+i].roomnum,room[n+i].bednum,room[n+i].num,room[n+i].name);

              i++;

             }

              n+=num;

              fclose(fp);          

              printf("\t\t读入成功!\n");

              printf("\t\t");

              system("pause");

              return(n);

    }

    void WritetoText(Student room[],int n)              

    {

    int i=0;

    FILE *fp;          

    char filename[100];                

         printf("\t\t循环写入数据\n");    

         printf("\t\t输入文件名:");

         scanf("\t\t%s",&filename);

         if((fp=fopen(filename,"w"))==NULL)            

         {

          printf("\t\t无法打开该文件\n");

          system("pause");

          return;

         }

         fprintf(fp,"%d\n",n);            

         while(i<n)

         {

          fprintf(fp,"%-10s%-10s%-10s%-10s\n",room[i].roomnum,room[i].bednum,room[i].num,room[i].name);

          i++;

         }

         fclose(fp);          

         printf("写入成功!\n");          

    }

    int main()          

    {

    int n=0;

          for(;;)

             {

              switch(menu_select())          

                    {

                     case 1:

                     printf("\t\t输入学生数据\n");                

                     n=Input(room1,n);

                     break;

                     case 2:

                     printf("\t\t显示学生数据\n");          

                     Display(room1,n);

                     break;

                     case 3:

                     printf("\t\t按房间号排序并显示\n");

                     Sort_by_roomnum(room1,n);            

                     printf("\t\t排序成功!\n");

     Display(room1,n);

                     printf("\t\t");

                     break;

                     case 4:

                     printf("\t\t按学号排序并显示\n");

                     Sort_by_num(room1,n);                

                     printf("\t\t\t排序成功!\n");

                     Display(room1,n);

                     printf("\t\t");

                     break;                 

                     case 5:

                     printf("\t\t插入一条记录按学号排序并显示\n");

                     n=Insert_a_record(room1,n);            

                     Display(room1,n);

                     printf("\t\t");

                     break;

                     case 6:

                     printf("\t\t按姓名查找,删除一条记录\n");

                     n=Delete_a_record(room1,n);            

                     printf("\t\t");

                     system("pause");

                     break;

                     case 7:

                     printf("\t\t查找并显示一个记录\n");

                     Query_a_record(room1,n);              

                     printf("\t\t");

                     system("pause");

                     break;

                     case 8:

                     printf("\t\t从文件中读入数据\n");

                     AddfromText(room1,n);                  

                     printf("\t\t");

                     system("pause");

                     break;

     case 9:

                     printf("\t\t循环写入数据\n");

                     WritetoText(room1,n);                  

                     printf("\t\t");

                     system("pause");

                     break;

                     case 0:

                     printf("\t\t谢谢使用\n");      

                     printf("\t\t");

                     system("pause");

                     exit(0);

                    }

             }     

     }


    通过对比发现,这两个程序的源代码几乎一样,但是这个过程让我学到很多,这个思考的过程很重要。

    展开全文
  •  该宿舍管理系统能实现对学生信息的查询(包括按姓名、学号、班级、宿舍号)、对学生信息的修改、调换寝室/增加新寝室。在细节方面可以防止因错误输入导致的程序崩掉,当操作错误次数达到一定数量时,会结束本次...

    系统功能:

      该宿舍管理系统能实现对学生信息的查询(包括按姓名、学号、班级、宿舍号)、对学生信息的修改、调换寝室/增加新寝室。在细节方面可以防止因错误输入导致的程序崩掉,当操作错误次数达到一定数量时,会结束本次操作。其他细节可以通过程序运行来体验。

    学习体会:

      这次写的是宿舍管理系统,主要是想学一下C语言的多文件操作和工程的建立。
      在代码实现方面没有什么问题,主要是第一次用工程来写程序,有好多关于多文件操作的问题不会,在最后调试的时候找了一些资料去解决多文件的问题。
      在调试的时候虽然大致知道多文件应该怎样去调用源文件,但是还是出现了源文件被重复调用的问题,查了资料才知道源文件是不能被重复调用的。
      而条件编译可以用来保护头文件。在大多数程序中,一个程序可以由多个源文件和多个头文件组成。其中源文件包含函数的定义和函数的调用,头文件包含类型定义、函数原型声明等可以在源文件之间共享的信息。因为头文件自身也可以包含头文件,随着程序的增大,是用的头文件可能越来越多,文件的嵌套包含可能导致无意间包含同一个头文件多次,如果该头文件中包含类型定义,将造成编译错误。为了防止头文件多次包含,可以用#ifndef和#endif指令来封闭文件的内容。例如,可以用如下方式保护文件DS.h。
      

    #ifndef DS_H//宏的名可以自己定义
    #define DS_H
    代码段
    #endif

      在首次包含这个文件时,没有定义宏DS_ H,所以预处理器允许保留#ifndef和#endif之间的多行内容。但是如果该文件再次被包含,只是宏DS_H已经被定义过了,预处理器将把#ifndef和#endif之间的多行内容删除。
      在写程序的过程中还遇到了结构体全局变量的问题。最开始我把全局变量的申明和定义都放在了一个头文件中,然后在每个源文件中都调用了这个头文件,导致变量被重复定义。后来将全局变量的申明放到了主函数上,在其他每个源文件都用extern +变量类型+名称引用了一下就好了。
      总结了一些多文件的操作的一些问题:http://blog.csdn.net/k_young1997/article/details/79006537
      本来打算加一个账号登录功能的,但是因为时间比较紧所以就没有加。如果想要账号登录的代码的话上次写的简单图书管理系统中有这部分代码。http://blog.csdn.net/k_young1997/article/details/73480766

    下面是宿舍管理系统主函数和各个头文件及源文件:

    main函数:

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include"sai.h"
    #include"find.h"
    #include"prin.h"
    #include"information.h"
    #include"InformationExit.h"
    
    using namespace std;
    
    HEAD s;
    
    int main()
    {
        int flag, shut = 1;
        load();
        while(shut){
            if(shut == 1){
                PrinMainMenu(0);
                shut = 2;
            }
            else if(shut == 2) PrinMainMenu(1);
            printf("\t\t\t\t");
            if(!scanf("%d", &flag)){
                Eat();
                continue;
            }
            switch(flag)
            {
                case 1: Find(); break;
                case 2: BIAN(); break;
                case 3: FindEmptyBed(1); break;
                case 4: shut = 0; break;
                default: printf("\t\t\t输入错误,请正确输入!\n"); PrinTimeOut(); break;
            }
        }
        return 0;
    }
    

    information.h头文件:

    #ifndef INFORMATION_H
    #define INFORMATION_H
    
    extern void Add(dorm h);
    extern void save(void);//保存宿舍信息
    extern void load(void);//读取宿舍信息
    extern void AddInformation(void);//创建新宿舍
    extern void ExchangeBedroom(int r);//寝室安排 
    
    #endif
    

    information.cpp源文件:

    #include"prin.h"
    #include"find.h"
    
    extern HEAD s;
    
    void Add(dorm h)
    {
        FILE *fp;
        if((fp = fopen("123.txt", "a")) == NULL){
            printf("\t\t\tFile open error!\n");
            exit(0);
        }
        fprintf(fp, "%d\n", h->num);
        for(int i = 1; i < 7; i++) fprintf(fp, "%d ", h->vis[i]);
        fprintf(fp, "\n");
        for(int i = 1; i < 7; i++){
            if(!h->vis[i]) continue;
            fprintf(fp, "%s\n%s\n%s\n%s\n", h->Infor[i].name, h->Infor[i].Cless, h->Infor[i].ID, h->Infor[i].sex);
        }
        if(fclose(fp)){
            printf("\t\t\tCan not the close file!\n");
            exit(0);
        }
        return ;
    }
    
    void save(void)//保存宿舍信息
    {
        FILE *fp;
        if((fp = fopen("123.txt", "w")) == NULL){
            printf("\t\t\tFile open error!\n");
            exit(0);
        }
        dorm p = s->head->next;
        while(p){
            fprintf(fp, "%d\n", p->num);
            for(int i = 1; i < 7; i++) fprintf(fp, "%d ", p->vis[i]);
            fprintf(fp, "\n");
            for(int i = 1; i < 7; i++){
                if(!p->vis[i]) continue;
                fprintf(fp, "%s\n%s\n%s\n%s\n", p->Infor[i].name, p->Infor[i].Cless, p->Infor[i].ID, p->Infor[i].sex);
            }
            p = p->next;
        }
        if(fclose(fp)){
            printf("\t\t\tCan not the close file!\n");
            exit(0);
        }
        return ;
    }
    void load(void)//读取宿舍信息
    {
        s = new H;
        s->head = new Bedroom;
        s->head->next = NULL;
        s->head->num = 0;
        dorm rear = s->head, q;
        FILE *fp;
        if((fp = fopen("123.txt", "r")) == NULL){
            printf("\t\t\tFile open error!\n");
            exit(0);
        }
        q = new Bedroom;
        while(fscanf(fp, "%d", &q->num) != -1){
            for(int i = 1; i < 7; i++) fscanf(fp, "%d", &q->vis[i]);
            for(int i = 1; i < 7; i++){
                if(!q->vis[i]) continue;
                fscanf(fp, "%s%s%s%s", q->Infor[i].name, q->Infor[i].Cless, q->Infor[i].ID, q->Infor[i].sex);
            }
            q->prior = rear;
            rear->next = q;
            rear = q;
            q = new Bedroom;
        }
        rear = NULL;
        delete q;
        if(fclose(fp)){
            printf("\t\t\tCan not close the file!\n");
            exit(0);
        }
        return ;
    }
    
    void AddInformation(void)//创建新宿舍
    {
        int n, k, ans = 0;
        char ch, v[200];
        dorm q, pre = s->head;
        while(pre->next) pre = pre->next;
        q = new Bedroom;
        memset(q->vis, 0, sizeof(q->vis));
        q->num = pre->num+1;
        printf("\t\t\t您将住在%04d号寝室:\n\n");
        printf("\t\t\t现在有1-6号床位是空床位,请选择床号:\n\t\t\t");
        scanf("%d", &n);
        q->vis[n] = 1;
        printf("\t\t\t请输入学生姓名:\n\t\t\t");
        scanf("%s", q->Infor[n].name);
        printf("\t\t\t请输入学生所在班级:\n\t\t\t");
        scanf("%s", q->Infor[n].Cless);
        printf("\t\t\t请输入学生学号:\n\t\t\t");
        scanf("%s", q->Infor[n].ID);
        printf("\t\t\t请输入学生性别:\n\t\t\t");
        scanf("%s", q->Infor[n].sex);
        while(1){
            ans++;
            printf("是否确认入住(确定请按y,退出请按n)\n");
            if((k = ScanCh(ans))) break;
            printf("\t\t\t您将住在%04d号寝室:\n\n");
            printf("\t\t\t现在有1-6号床位是空床位,请选择床号:\n\t\t\t");
            printf("%d\n", n);
            printf("\t\t\t请输入学生姓名:\n\t\t\t");
            printf("%s\n", q->Infor[n].name);
            printf("\t\t\t请输入学生所在班级:\n\t\t\t");
            printf("%s\n", q->Infor[n].Cless);
            printf("\t\t\t请输入学生学号:\n\t\t\t");
            printf("%s\n", q->Infor[n].ID);
            printf("\t\t\t请输入学生性别:\n\t\t\t");
            printf("%s\n", q->Infor[n].sex);
        }
        if(-1 == k || 2 == k){
            delete q;
            return ;
        }
        q->prior = pre;
        q->next = NULL;
        pre->next = q;
        Add(q);
        return ;
    }
    
    void ExchangeBedroom(int r)//寝室安排 
    {
        if(r == 3){
            system("cls");
            printf("\n\t\t\t\t操作错误达到三次,本次操作将不被保存!!\n");
            PrinTimeOut(); 
            return ;
        }
        dorm p;
        int i, k, j = 0, flag = 0, ans = 0, a[100], t = 1, h, f;
        while(1){
            system("cls");
            h = FindEmptyBed(0);
            ans++;
            printf("\t\t\t是否增加一个新的宿舍(是 请按y,否 请按n):\n\n");
            if((k = ScanCh(ans))) break;
        }
        if(-1 == k) return ;
        if(k == 1){
            AddInformation();
            return ;
        }
        if(h && 2 == k) return ;
        printf("\t\t\t\t请输入要入住的寝室号:");
        scanf("%d", &k); printf("\n");
        p = FindByBedNum(k);
        if(!p){
            ExchangeBedroom(r+1);
            return ;
        }
        memset(a, 0, sizeof(a));
        for(i = 1; i < 7; i++) if(!p->vis[i]) a[i] = 1, j++;
        if(j) printf("\t\t\t该寝室还有%d个空床位,分别是:\n\n", j);
        else{
            printf("\t\t\t%04d号寝室已没有空床位了,请从新选择寝室!!\n");
            PrinTimeOut();system("cls");
            ExchangeBedroom(r+1);
            return ;
        }
    
        for(i = f = 1; i < 7; i++){
            if(f && a[i]){
                f = 0;
                printf("\t\t\t%04d号床", i);
            } 
            else if(!f && a[i])printf("、%04d号床", i);
        } 
        printf("\n\n");
        while(t < 4){
            printf("\t\t\t请选择床号:");
            f = scanf("%d", &k);
            if(f && a[k]) break;
            Eat();
            printf("\n\t\t\t您还有 %d 次机会!!\n", 3-t);
            t++;
        }
        if(4 == t){
            ExchangeBedroom(r+1);
            return ;
        }
        p->vis[k] = 1;
        printf("\t\t\t请输入姓名:\n\t\t\t\t");
        scanf("%s", p->Infor[k].name);
        printf("\t\t\t请输入班级:\n\t\t\t\t");
        scanf("%s", p->Infor[k].Cless);
        printf("\t\t\t请输入学号:\n\t\t\t\t");
        scanf("%s", p->Infor[k].ID);
        printf("\t\t\t请输入性别:\n\t\t\t");
        scanf("%s", p->Infor[k].sex);
        printf("\n\n\t\t\t信息录入完毕!!\n");
        PrinTimeOut();
        system("cls");
        printf("\t\t\t您将住在:");
        PrinInfor(p, 1, k);
        save();
        PrinTimeOut();system("cls");
        return ;
    }

    prin.h头文件:

    #ifndef PRIN_H
    #define PRIN_H
    
    #include"sai.h"
    
    extern void PrinTimeOut(void);//暂停
    extern void PrinNotice(void);//数据库没有信息
    extern void PrinMainMenu(int flag);//主菜单
    extern void PrinFindMenu(void);//查询菜单
    extern void PrintModifyMenu(void);//修改菜单
    extern void PrinInfor(dorm p, int flag, int n);
    extern void Eat(void);
    extern int ScanCh(int ans);
    extern void PrinExitFind(void);
    extern void PrinExitMen(void);
    
    #endif

    prin.cpp源文件:

    #include"prin.h"
    
    extern HEAD s;
    
    void PrinTimeOut(void)//暂停
    {
        printf("\t\t\t\t");
        system("pause");
        return ;
    }
    
    void PrinNotice(void)//数据库没有信息
    {
        printf("\t\t\t数据库中暂无任何信息,请录入学生信息!\n");
        system("pause");
        system("cls");
        return ;
    }
    
    void PrinMainMenu(int flag)//主菜单
    {
        system("cls");
        char h[2][30] = {"宿舍管理系统", "欢迎使用宿舍管理系统"};
        printf("\t\t\t*******************************************\n");
        printf("\t\t\t*                                         *\n");
        if(flag) printf("\t\t\t*               %s              *\n", h[0]);
        else printf("\t\t\t*           %s          *\n", h[1]);
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*         查询学生信息      请按 1        *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*         变更学生信息      请按 2        *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*         宿舍空床位情况    请按 3        *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*         退出系统          请按 4        *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*******************************************\n");
        return ;
    }
    
    void PrinFindMenu(void)//查询菜单
    {
        system("cls");
        printf("\t\t\t*******************************************\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*              请选择操作选项             *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*           按姓名查询       请按 1       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*           按学号查询       请按 2       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*           按班级查询       请按 3       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*           按宿舍号查询     请按 4       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*           所有学生信息     请按 5       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*           返回上一级菜单   请按 6       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*******************************************\n");
        return ;
    }
    
    void PrintModifyMenu(void)//修改菜单
    {
        system("cls");
        printf("\t\t\t*******************************************\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*              请选择操作选项             *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*       寝室安排             请按 1       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*       修改学生信息         请按 2       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*       删除学生信息         请按 3       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*       返回上一级菜单       请按 4       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*******************************************\n");
        return ;
    }
    
    void PrinInfor(dorm p, int flag, int i)
    {
        if(flag) printf("\t\t\t%04d寝室:\n", p->num);
        printf("\t\t\t\t%d号床:\n", i);
        printf("\t\t\t\t姓名:%s\n\t\t\t\t班级:%s\n", p->Infor[i].name,p->Infor[i].Cless);
        printf("\t\t\t\t学号:%s\n\t\t\t\t性别:%s\n\n", p->Infor[i].ID,p->Infor[i].sex);
        return ;
    }
    
    void Eat(void)
    {
        char v[200];
        printf("\t\t\t输入错误!!\n");
        gets(v);
        PrinTimeOut();
        return ;
    }
    
    int ScanCh(int ans)
    {
        char v[200];
        printf("\t\t\t\t");
        scanf("%s", v);
        if(v[0] == 'y'&& v[1] == '\0') return 1;
        else if(v[0] == 'n' && v[1] == '\0') return 2;
        if(ans >= 3){
            printf("\t\t指令输入错误次数达到3次,本次操作将被取消!!\n");
            PrinTimeOut();
            system("cls");
            return -1;
        }
        printf("\t\t输入指令有误,请正确输入指令,您还有 %d 次机会\n", 3-ans);
        PrinTimeOut();
        system("cls");
        return 0;
    }
    
    void PrinExitFind(void)
    {
        system("cls");
        printf("\t\t\t*******************************************\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*              请选择操作选项             *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*        按姓名检索          请按 1       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*        按学号检索          请按 2       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*       返回上一级菜单       请按 3       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*******************************************\n");
        return ;
    }
    
    void PrinExitMen(void)
    {
        system("cls");
        printf("\t\t\t*******************************************\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*               请选择修改项              *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*        修改姓名            请按 1       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*        修改班级            请按 2       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*        修改学号            请按 3       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*        修改性别            请按 4       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*        返回上一级菜单      请按 5       *\n");
        printf("\t\t\t*                                         *\n");
        printf("\t\t\t*******************************************\n");
        return ;
    }
    

    find.h头文件:

    #ifndef FIND_H
    #define FIND_H
    
    #include"prin.h"
    
    extern dorm FindByName(char *str);//按姓名查找
    extern dorm FindByID(char *str);//按学号查找
    extern void FindByCless(char *str);//按班级查找
    extern dorm FindByBedNum(int n);//宿舍号查找
    extern int FindEmptyBed(int n);//空床位查找
    extern void FindAll(void);
    extern void FindName(void);
    extern void FindId(void);
    extern void FindCless(void);
    extern void FindBedNum(void);
    extern void Find(void);
    
    #endif

    find.cpp源文件:

    #include"find.h"
    #include"sai.h"
    
    extern HEAD s;
    
    dorm FindByName(char *str)//按姓名查找
    {
        dorm p = NULL;
        p = s->head->next;
        if(!p){
            PrinNotice();
            return NULL;
        }
        while(p){
            for(int i = 1; i < 7; i++)
                if(p->vis[i] && !strcmp(p->Infor[i].name, str))
                    return p;
            p = p->next;
        }
        printf("\t\t数据库中没有此人,请确保姓名输入正确或用其他信息进行检索!\n");
        PrinTimeOut();
        return NULL;
    }
    
    dorm FindByID(char *str)//按学号查找
    {
        dorm p = NULL;
        p = s->head->next;
        if(!p){
            PrinNotice();
            return NULL;
        }
        while(p){
            for(int i = 1; i < 7; i++)
                if(p->vis[i] && !strcmp(p->Infor[i].ID, str))
                    return p;
            p = p->next;
        }
        printf("\t\t数据库中没有该学号,请确保学号输入正确或用其他信息进行检索!\n");
        PrinTimeOut();
        return NULL;
    }
    
    void FindByCless(char *str)//按班级查找
    {
        int i, flag, logo = 1;
        dorm p = s->head->next;
        if(!p){
            PrinNotice();
            return ;
        }
        printf("\t\t\t\t%s学生住宿情况:\n\n", str);
        while(p){
            for(i = flag = 1; i < 7; i++){
                if(p->vis[i] && !strcmp(p->Infor[i].Cless, str)){
                    PrinInfor(p, flag, i);
                    flag = logo = 0;
                }
            }
            p = p->next;
        }
        if(logo) printf("\t\t\t\t暂没有该班级学生信息!\n");
        PrinTimeOut();
        return ;
    }
    
    dorm FindByBedNum(int n)//宿舍号查找
    {
        dorm p = s->head->next;
        if(!p){
            PrinNotice();
            return NULL;
        }
        while(p){
            if(p->num == n) return p;
            p = p->next;
        }
        printf("\t\t数据库中没有该寝室的信息!\n");
        PrinTimeOut();
        return NULL;
    }
    
    int FindEmptyBed(int f)//空床位查找
    {
        int i, flag, logo = 1;
        dorm p = s->head->next;
        if(!p) logo = -1;
        while(p){
            for(i = flag = 1; i < 7; i++){
                if(!p->vis[i]){
                    if(logo){
                        printf("\t\t\t\t还剩余以下空床位:\n\n\n");
                        logo = 0;
                    }
                    if(flag){
                        printf("\t\t\t%04d寝室:\n\n\t\t\t", p->num);
                        flag = 0;
                    }
                    printf("%d号床  ", i);
                }
            }
            if(!flag) printf("\n\n");
            p = p->next;
        }
        if(logo == 1) printf("\t\t\t\t暂无空床位!!!\n\n");
        else if(logo == -1) printf("\t\t\t\t数据库中暂无任何数据!!\n");
        if(f) PrinTimeOut();
        return logo;
    }
    
    void FindAll(void)
    {
        dorm q = s->head->next;
        if(!q){
            PrinNotice();
            return ;
        }
        while(q){
            for(int i = 1; i < 7; i++){
                if(!q->vis[i]) continue;
                if(i == 1) PrinInfor(q, 1, i);
                else PrinInfor(q, 0, i);
            }
            q = q->next;
        }
        PrinTimeOut();
        return ;
    }
    
    void FindName(void)
    {
        int i;
        dorm q = s->head->next, p = NULL;
        char str[100];
        if(!q){
            PrinNotice();
            return;
        }
        printf("\t\t\t请输入需要查询的学生的姓名:\n\t\t\t");
        scanf("%s", str);
        p = FindByName(str);
        if(!p) return ;
        for(i = 1; i < 7; i++){
            if(!p->vis[i]) continue;
            if(0 == strcmp(str, p->Infor[i].name)) break;
        }
        PrinInfor(p, 1, i);
        PrinTimeOut();
        return ;
    }
    
    void FindId(void)
    {
        int i;
        dorm q = s->head->next, p = NULL;
        char str[100];
        if(!q){
            PrinNotice();
            return ;
        }
        printf("\t\t\t请输入需要查询的学生的学号:\n\t\t\t");
        scanf("%s", str);
        p = FindByID(str);
        if(!p) return ;
        for(i = 1; i < 7; i++){
            if(!p->vis[i]) continue;
            if(0 == strcmp(str, p->Infor[i].ID)) break;
        }
        PrinInfor(p, 1, i);
        PrinTimeOut();
        return ;
    }
    
    void FindCless(void)
    {
        char str[100];
        dorm p = s->head->next;
        if(!p){
            PrinNotice();
            return ;
        }
        printf("\t\t\t请输入需要查询的班级:\n\t\t\t");
        scanf("%s", str);
        FindByCless(str);
        return ;
    }
    
    void FindBedNum(void)
    {
        int n;
        dorm h, p = s->head->next;
        if(!p){
            PrinNotice();
            return ;
        }
        printf("\t\t\t请输入需要查找的寝室号:\n\t\t\t");
        scanf("%d", &n);
        h = FindByBedNum(n);
        if(!h) return ;
        for(int i = 1; i < 7; i++){
            if(!h->vis[i]) continue;
            printf("\t\t\t %d 号床:\n\t\t\t姓名:%s\n", i, h->Infor[i].name);
            printf("\t\t\t班级:%s\n\t\t\t学号:%s\n", h->Infor[i].Cless, h->Infor[i].ID);
            printf("\t\t\t性别:%s\n\n", h->Infor[i].sex);
        }
        PrinTimeOut();
        return ;
    }
    
    void Find(void)
    {
        int flag;
        while(1){
            PrinFindMenu();
            if(!scanf("%d", &flag)){
                Eat();
                continue;
            }
            switch(flag){
                case 1: FindName(); break;
                case 2: FindId(); break;
                case 3: FindCless(); break;
                case 4: FindBedNum(); break;
                case 5: FindAll(); break;
                case 6: return ;
                default:  printf("\t\t\t输入错误,请正确输入!\n");system("pause");break;
            }
        }
    }

    Information.h头文件:

    #ifndef INFORMATIONEXIT_H
    #define INFORMATIONEXIT_H
    
    extern void ExitName(dorm h, int i);
    extern void ExitId(dorm h, int i);
    extern void ExitCless(dorm h, int i);
    extern void ExitSex(dorm h, int i);
    extern bool Exit(dorm h, int i);
    extern void ExitByName(void);
    extern void ExitById(void);
    extern void Retrieve(void);
    void DelInformation(void);
    void DelById(void);
    void DelByName(void);
    void BIAN(void);
    
    #endif
    

    Information.cpp源文件:

    #include"sai.h"
    #include"prin.h"
    #include"find.h"
    #include"information.h"
    
    extern HEAD s;
    
    void ExitName(dorm h, int i)
    {
        printf("\t\t\t请输入新的姓名:");
        scanf("%s", h->Infor[i].name);
        printf("\n\t\t\t\t修改成功!!\n");
        system("pause");
        return ;
    }
    
    void ExitId(dorm h, int i)
    {
        printf("\t\t\t请输入新的学号:");
        scanf("%s", h->Infor[i].ID);
        printf("\n\t\t\t\t修改成功!!\n");
        system("pause");
        return ;
    }
    
    void ExitCless(dorm h, int i)
    {
        printf("\t\t\t请输入新的班级:");
        scanf("%s", h->Infor[i].Cless);
        printf("\n\t\t\t\t修改成功!!\n");
        system("pause");
        return ;
    }
    void ExitSex(dorm h, int i)
    {
        printf("\t\t\t请输入性别:");
        scanf("%s", h->Infor[i].sex);
        printf("\n\t\t\t\t修改成功!!\n");
        system("pause");
        return ;
    }
    
    bool Exit(dorm h, int i)
    {
        int f = 0, flag;
        while(1){
            PrinExitMen();
            if(!scanf("%d", &flag)){
                Eat();
                continue;
            }
            switch(flag){
                case 1: ExitName(h, i); f = 1; break;
                case 2: ExitCless(h, i);  f = 1; break;
                case 3: ExitId(h, i);  f = 1; break;
                case 4: ExitSex(h, i);  f = 1; break;
                case 5: if(f) return true; else return false;
                default: printf("\t\t\t输入错误,请正确输入!\n");system("pause");break;
            }
        }
    }
    
    void ExitByName(void)
    {
        int i;
        char str[100];
        printf("\t\t\t请输入需要修改信息的学生姓名:\n\t\t\t\t");
        scanf("%s", str);
        dorm h = FindByName(str);
        if(!h) return ;
        for(i = 1; i < 7; i++){
            if(!h->vis[i]) continue;
            if(strcmp(str, h->Infor[i].name) == 0) break;
        }
        system("cls");
        PrinInfor(h, 1, i);
        system("pause");
        if(Exit(h, i)) save();
        return ;
    }
    
    void ExitById(void)
    {
        int i;
        char str[100];
        printf("\t\t\t请输入需要修改的学生学号:\n\t\t\t\t");
        scanf("%s", str);
        dorm h = FindByID(str);
        if(!h) return ;
        for(i = 1; i < 7; i++){
            if(!h->vis[i]) continue;
            if(strcmp(str, h->Infor[i].ID) == 0) break;
        }
        system("cls");
        PrinInfor(h, 1, i);
        system("pause");
        if(Exit(h, i)) save();
        return ;
    }
    
    void Retrieve(void)
    {
        int flag;
        while(1){
            PrinExitFind();
            if(!scanf("%d", &flag)){
                Eat();
                continue;
            }
            switch(flag){
                case 1: ExitByName(); break;
                case 2: ExitById(); break;
                case 3: return ;
                default: printf("\t\t\t输入错误,请正确输入!\n");system("pause");break;
            }
        }
    }
    
    void DelByName(void)
    {
        int i, ans = 0, k;
        char str[100];
        printf("\t\t\t请输入需要删除的学生的姓名:\n\t\t\t\t");
        scanf("%s", str);
        dorm h = FindByName(str);
        if(!h) return ;
        for(i = 1; i < 7; i++){
            if(!h->vis[i]) continue;
            if(strcmp(str, h->Infor[i].name) == 0) break;
        }
        system("cls");
        while(1){
            ans++;
            PrinInfor(h, 1, i);
            printf("\t\t\t是否删除该学生信息(是 请按 y 否 请按 n)\n\t\t\t");
            if((k = ScanCh(ans))) break;
        }
        if(-1 == k) return ;
        h->vis[i] = 0;
        save();
        printf("\t\t\t\t删除成功!!\n");
        PrinTimeOut();
        return ;
    }
    void DelById(void)
    {
        int i, ans = 0, k;
        char str[100];
        printf("\t\t\t请输入需要删除的学生的学号:\n\t\t\t\t");
        scanf("%s", str);
        dorm h = FindByID(str);
        if(!h) return ;
        for(i = 1; i < 7; i++){
            if(!h->vis[i]) continue;
            if(strcmp(str, h->Infor[i].ID) == 0) break;
        }
        system("cls");
        while(1){
            ans++;
            PrinInfor(h, 1, i);
            printf("\t\t\t是否删除该学生信息(是 请按 y 否 请按 n)\n");
            if((k = ScanCh(ans))) break;
        }
        if(-1 == k) return ;
        h->vis[i] = 0;
        save();
        printf("\t\t\t\t删除成功!!\n");
        PrinTimeOut();
        return ;
    }
    
    void DelInformation(void)
    {
        int flag;
        while(1){
            PrinExitFind();
            if(!scanf("%d", &flag)){
                Eat();
                continue;
            }
            switch(flag){
                case 1: DelByName(); break;
                case 2: DelById(); break;
                case 3: return ;
                default: printf("\t\t\t输入错误,请正确输入!\n"); PrinTimeOut(); break;
            }
        }
    } 
    
    void BIAN(void)
    {
        int flag;
        while(1){
            PrintModifyMenu();
            if(!scanf("%d", &flag)){
                Eat();
                continue;
            }
            switch(flag){
                case 1: ExchangeBedroom(0); break;
                case 2: Retrieve(); break;
                case 3: DelInformation(); break;
                case 4: return ;
                default : printf("\t\t\t输入错误,请正确输入!\n"); PrinTimeOut(); break;
            }
        }
    }
    
    

    sai.h头文件:

    #ifndef SAI_H
    #define SAI_H
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    typedef struct InforPren{
        char name[100], Cless[100], ID[30], sex[10];
    }InforPeople;
    
    typedef struct Bedroom{
        int num;
        InforPeople Infor[7];
        int vis[7];
        struct Bedroom *next;
        struct Bedroom *prior;
    }*dorm;
    
    typedef struct H{
        dorm head;
    }*HEAD;
    
    #endif
    展开全文
  • C语言设计学生宿舍管理系统

    千次阅读 多人点赞 2019-02-19 15:14:21
    这个只是简单的系统,只有一...当给宿舍添加学生时,遇到宿舍爆满,就会添加失败等功能。 以下为代码**:** #include"stdio.h" #include"stdlib.h" #include"string.h" #include...

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


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


    以下为代码**:**

    #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语言写的学生宿舍管理系统。程序的主要功能有:住宿学生情况登记,修改和删除;寝室的住宿情况记录和修改;以及按要求输出某学生,某寝室,或某楼层的住宿情况。程序简明,已修改即添加新功能
  • 高级语言程序设计课程设计 说明书 设计题目 学生宿舍管理系统 目 录 一总体设计? 3 1 程序的总体设计? 3 2. 函数原型声明? 3 二用户说明? 4 1菜单界面? 5 2入住登记界面? 5 3删除界面? 5 4浏览界面? 6 5查询修改? 6 ...
  • C语言课程设计 学生宿舍管理系统 链表、文件版

    万次阅读 多人点赞 2017-06-22 12:44:16
    采用链表和文件完成的学生宿舍管理系统,伴随代码文件产生"数据.txt"文本文件来存储学生数据。
  • 学生宿舍管理系统实现功能一、功能结构二、代码实现1.头文件声明需要使用的函数名1.打印各个选项菜单函数2.选择选项函数3.创建结构体4.宿管录入学生信息函数5.宿管修改学生信息函数6.宿管浏览已录入学生信息3.学生...
  • 大学宿舍管理系统 C语言实现

    千次阅读 多人点赞 2018-12-08 14:00:13
    废话不说,先上代码(本文最后有测试数据): 代码: #include<stdio.h> #include<stdlib.h>...typedef struct pnode //结构体定义 用于存放学生信息的节点 { char name[10]; /...
  • 学生信息管理系统 一、开发语言:C语言 二、开发要求:每人提交一份系统研发报告和源代码,基于课程设计报告格式,可以建立小组讨论。2020年08月10日前上交。 三、开发主要功能如下 系统功能包括:用户登陆、信息...
  • C语言实训报告——学生宿舍信息管理系统

    千次阅读 多人点赞 2018-11-09 22:43:45
    学生宿舍信息管理系统主要实现的功能有:创建学生宿舍信息,显示学生宿舍信息,查询学生宿舍信息,修改学生宿舍信息,删除学生宿舍信息,保存学生宿舍信息,读取学生宿舍信息。其系统功能模块图如下: 完整代码...
  • 高级语言程序设计课程设计 说明书 设计题目 学生宿舍管理系统 目 录 一总体设计 3 1程序总体设计 3 2. 函数原型申明 3 二用户说明 4 1菜单界面 5 2入住登记界面 5 3删除界面 5 4浏览界面 6 5查询修改 6 6排序界面 6 ...
  • .word可编辑. . 专业.专注 . 面向过程程序设计 课 程 设 计 课程名称学生宿舍管理系统 院 系 班 级 学 ...实验内容 需求分析 程序基本框架结构图.5 程序测试.6 课程设计总结.8 附录源代码.18 引言 学生宿舍管理系统对于
  • C语言-学生成绩管理系统 【含完整 代码

    万次阅读 多人点赞 2020-03-02 21:44:03
    学号、姓名、宿舍号、性别、年龄; 学号为标准格式1234567890十位,其中前两位代表学生入学年份,3-4位代表学生所在学院,5-6位代表学生所学专业、7-8位代表学生所在班级,9-10位代表学生在班级中的序号。 姓名...
  • 学生信息管理系统 一、开发语言:C语言 二、开发要求:每人提交一份系统研发报告和源代码,基于课程设计报告格式,可以建立小组讨论。2020年08月10日前上交。 三、开发主要功能如下 系统功能包括:用户登陆、信息...
  • 功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名、学号、性别、出生年月、专业、班级、家庭地址、宿舍号码等。 系统要求实现以下功能: 1、输入功能:录入学生信息(包括学生学号、姓名、性别、出生...
  • 学生教务系统

    2012-07-31 15:38:03
    C语言学生教务系统代码 1、题目描述 设计一个教务信息管理系统,该程序具有以下功能: (1)录入如下信息: 学生基本信息:如学号、姓名、性别、年龄、宿舍号码、电话号码等。 课程基本信息:课程编号、课程名称、...
  • | VB学生公寓宿舍管理系统(SQL).rar 6.04 MB | vf教职工信息管理系统毕业设计.rar 2.30 MB | 安卓Android通讯录管理系统.rar 2.45 MB | 格雷码问题递归算法设计和实验.rar 349.55 KB | 工资管理系统(vf实现).rar 352...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

学生宿舍管理系统代码c语言

c语言 订阅