淡定一点 发表于 2014-6-30 18:05:11

C语言 求解

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void input();                                                       /*宿舍信息添加函数*/
void del();                                                          /*宿舍信息删除函数*/
void find();                                                           /*宿舍信息查找函数*/
void sort();                                                     /*宿舍信息排序函数*/
void view();                                                           /*宿舍信息显示函数*/
typedef struct stu{                              /*定义链表节点的结构体类型*/
        int num;                                                         /*学号*/
        char name;                                          /*姓名*/
        char stay;                                            /*所在系*/
        char clas;                                            /*班级*/
        int sus;                                    /*宿舍*/
        intphone;                                 /*电话号码*/
        char bed;                              /*床位*/
        struct stu *next;
}STU;

STU *create()                              /*读取文件并创建链表*/
{   int n=0;                                                                                          
        FILE *fp;
        STU *head,*p1,*p2;
        fp=fopen("wzw","r");                               /*打开wzw文件*/
                if(fp==NULL)
                {   printf("打开文件失败");
                        getchar();
                        exit(0);
                }       
        head=NULL;                                                               
        p1=p2=(STU*)malloc(sizeof(STU));
        while(!feof(fp))                                              /*读入文件数据并创建链表*/
        {        fscanf(fp,"%d%s%s%s%d%d%s",&p1->num,&p1->name,&p1->stay,&p1->clas,&p1->sus,&p1->phone,&p1->bed);
                n=n+1;
                if(n==1)        head=p1;
                else        p2->next=p1;
                p2=p1;
                p1=(STU*)malloc(sizeof(STU));
        }
        p2->next=NULL;
        free(p1);
        fclose(fp);
        return(head);
}

void main()
{char c;
       do
       { system("cls");
printf("\t\t****************************************\n");
printf("\t\t****************************************\n");
printf("                                        \n");
               printf("\t\t      欢迎使用学生信息管理系统         \n");
printf("                                        \n");
               printf("\t\t    自动化101    翁志文   10417126      \n");
printf("                                        \n");
                  printf("\t\t****************************************\n");
printf("\t\t****************************************\n");
printf("                                        \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("                                        \n");
               printf("                                        \n");
               printf("\t\t请选择输入选项:>");
                do
                {c=getchar();
                }while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6');
                getchar();
                switch(c)
                {    case '1':   input(); break;
            case '2' :    del();   break;
            case '3':   find();break;
            case '4':   sort();break;
                        case '5':          view();break;
            case '6':   exit(0); break;
                }
                printf(" 按任意键返回主菜单:\n");
                getchar();
                system("cls");
        }while(1);
}

void input()                                            /*宿舍信息添加功能函数*/
{   int m=1,n=0;                                                  /*输入信息的循环变量m*/
        FILE *fp;                                                                /*文件指针fp*/
        STU *p,*head,*p1,*p2;
head=NULL;                                                        /*头结点为NULL*/
system("cls");
        p1=p2=(STU*)malloc(sizeof(STU));                /*动态申请一个新节点*/
          while(m)                                                          /*输入学生宿舍信息并创建链表*/
               {   printf("请输入学生宿舍信息");
                       printf("\n");
                       printf("请输入学号:");
                        scanf("%d",&p1->num);                       
                     printf("请输入姓名:");
                        scanf("%s",&p1->name);                       
                       printf("请输入所在系:");
                        scanf("%s",&p1->stay);                       
                       printf("请输入班级:");
                        scanf("%s",&p1->clas);
                       printf("请输入宿舍号:");
                        scanf("%d",&p1->sus);
             printf("请输入电话号码:");
          scanf("%d",&p1->phone);
                       printf("请输入床位:");
                        scanf("%s",&p1->bed);
                       n=n+1;
                                if(n==1)
                                        head=p1;
                                else
                                        p2->next=p1;                               
                                p2=p1;
                       p1=(STU*)malloc(sizeof(STU));
                       printf("请选择        0:结束输入1:继续输入\n");
                       scanf("%d",&m);       
                  }
                p2->next=NULL;
                free(p1);                                                  /*释放p1指向的节点内存*/
          fp=fopen("wzw","a+");                        /*打开文件wzw*/
                p=head;
                while(p)                                                  /*将输入的学生宿舍信息保存到文件*/
                {fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
                       p=p->next;                                               
                }
          fclose(fp);                                           /*关闭文件*/
}

void del()                                              /*宿舍信息删除功能函数*/
{        FILE *fp;
        int num,sus,j,i;
        STU *head,*p1,*p2,*p3;
        head=create();
system("cls");
        printf("请选择删除方式的序号        1:宿舍号 2:学号\n");
        scanf("%d",&i);
        if(i==1)
        {        printf("请输入要删除的学生宿舍号:\n");
                scanf("%d",&sus);
                if(head==NULL)
                {printf("\n文件内容为空!\n");
                exit(0);
                }
                p1=head;
                while(sus!=p1->sus&&p1->next!=NULL)
                        {p2=p1;
                        p1=p1->next;
                        }
                  if(sus==p1->sus)
                        {printf("学生信息已找到:\n");
             printf("学号    姓名\t      所在系\t班级\t宿舍号\t电话\t床号\n");
        printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p1->num,p1->name,p1->stay,p1->clas,p1->sus,p1->phone,p1->bed);
        printf("是否删除        1:是 2:否\n");
                        scanf("%d",&j);
                                if(j==1)
                                   {
                                        if(p1==head)
                                                head=p1->next;
                                  else
                                                p2->next=p1->next;
free(p1);
      fp=fopen("wzw","w");                        /*打开文件wzw*/
           p3=head;
          while(p3->next)                   /*将输入的学生宿舍信息保存到文件*/
        { fputc('\n',fp);
        fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p3->num,p3->name,p3->stay,p3->clas,p3->sus,p3->phone,p3->bed);
                p3=p3->next;                                               
                                        }fclose(fp);       
                                  }
                                }
                           else
                           printf("找不到此学生宿舍信息\n");
        }
        if(i==2)
        {        printf("请输入要删除的学生学号:\n");
                scanf("%d",&num);
                if(head==NULL)
                {
                        printf("\n文件内容为空!\n");
                        exit(0);
                }
                p1=head;
                while(num!=p1->num&&p1->next!=NULL)
                        {   p2=p1;
                                p1=p1->next;
                        }
                  if(num==p1->num)
                        {printf("学生宿舍信息已找到:\n");
        printf("学号    姓名\t      所在系\t班级\t宿舍号\t电话\t床号\n");
        printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p1->num,p1->name,p1->stay,p1->clas,p1->sus,p1->phone,p1->bed);
                                printf("是否删除        1:是 2:否\n");
                                scanf("%d",&j);
                                if(j==1)
                                   {if(p1==head)
                                                head=p1->next;
                                  else
                                                p2->next=p1->next;
                                        free(p1);
fp=fopen("wzw","w");                                /*打开文件wzw*/
                   p3=head;
                while(p3->next)                                /*将输入的学生宿舍信息保存到文件*/
        {fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p3->num,p3->name,p3->stay,p3->clas,p3->sus,p3->phone,p3->bed);
                p3=p3->next;                                               
        }fclose(fp);       
          }
                }
                else
                           printf("找不到此学生宿舍信息\n");
                }
          printf("请选择序号                1:继续删除 2:结束删除\n");
          scanf("%d",&j);                               
                                if(j==1)
                                        del();
}
void find()                                /*宿舍信息查找功能函数*/
{   int i,j,k=0;                        /*定义i为查找方式;定义j为学号变量*/
        STU *head,*p;
        head=create();
system("cls");
        printf("请选择查找方法的序号:1.按学号查找2.按宿舍号查找\n");
        scanf("%d",&i);       
        if(i==1)                                /*按学号查找*/
       {   printf("请输入要查找的学号:");
                scanf("%d",&j);
                p=head;
                while((j!=p->num)&&(p->next!=NULL))
                        p=p->next;               
          if(j==p->num)      /*查到宿舍信息并输出*/
                {   printf("学生宿舍信息已找到:\n");
                        printf("学号    姓名\t      所在系\t班级\t宿舍号\t电话\t床号\n");
        printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
                }
                else                /*无此学生信息*/
                printf("抱歉,没有此学生信息\n");
          }       
        if(i==2)                                /*按宿舍号查找*/
       {printf("请输入要查找的宿舍号:");
                scanf("%d",&j);
                p=head;
                while((j!=p->sus)&&(p->next!=NULL))
                        p=p->next;               
          if(j==p->sus)      /*查到宿舍信息并输出*/
                {   printf("学生宿舍信息已找到:\n");
                        printf("学号   姓名\t所在系\t班级\t宿舍号\t电话号码\t床号\n");
        printf("%-5d%s\t%s\t%s\t%d\t%d\t%s\n",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
                }
                else                                    /*无此学生宿舍信息*/
                printf("抱歉,没有此学生信息\n");
          }       
    free(p);
        printf("请选择正确序号        1:继续查找 2:结束查找\n");
        scanf("%d",&i);
        if(i==1)
                find();
        if(i==2)
                getchar();       
}

void sort()                                                    /*定义学生信息排序功能函数*/
{   STU *head,*p0,*p1,*p2,*pt=NULL;
        int a,j,k,i=0,n;
        head=create();
system("cls");
        printf("请选择您想要的排序方式按数字选择:1、按系排序2、按班级排序 请输入选项:");
        scanf("%d",&a);
        getchar();
        if(a==1)                                        /*按系排序*/
    {    pt=(STU *)malloc(sizeof(STU));
             p1=head;
         while(p1!=NULL)
            {i++;
            p1=p1->next;
             }
               p1=head;
               for(j=0;j<i-1;j++)                      /*用冒泡法排序*/
               {p1=head;
                       for(k=0;k<i-1-j;k++)
                       {p2=p1;
                                p1=p1->next;
                                if(strcmp(p2->stay,p1->stay)>0)/*交换两链表间数据*/                                               { n=p2->num;p2->num=p1->num;p1->num=n;
strcpy(pt->name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,pt->name);
                strcpy(pt->stay,p1->stay);strcpy(p1->stay,p2->stay);strcpy(p2->stay,pt->stay);
                strcpy(pt->clas,p1->clas);strcpy(p1->clas,p2->clas);strcpy(p2->clas,pt->clas);
                n=p2->sus;p2->sus=p1->sus;p1->sus=n;
                n=p2->phone;p2->phone=p1->phone;p1->phone=n;
                strcpy(pt->bed,p1->bed);strcpy(p1->bed,p2->bed);strcpy(p2->bed,pt->bed);
                                }
                       }
               }
                printf("排序成功!!");
                printf("\n");
                p0=head;
                printf("学号   姓名\t所在系\t班级\t宿舍号\t电话\t床号\n");
                while(p0->next!=NULL)
        {printf("%d\t%s\t%s\t%s\t%d\t%d\t%s\n",p0->num,p0->name,p0->stay,p0->clas,p0->sus,p0->phone,p0->bed);
                        printf("\n");
                        p0=p0->next;
                }
        }
        if(a==2)                           /*按班级排序*/
       {   pt=(STU *)malloc(sizeof(STU));
             p1=head;
         while(p1!=NULL)
            {         i++;
            p1=p1->next;
             }
          p1=head;
                for(j=0;j<i-1;j++)                /*用冒泡法排序*/
                {p1=head;
                  for(k=0;k<i-1-j;k++)
                  {p2=p1;
                       p1=p1->next;
                       if(strcmp(p2->clas,p1->clas)>0)/*交换两链表间数据*/                                    
                        { n=p2->num;p2->num=p1->num;p1->num=n;
strcpy(pt->name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,pt->name);
                strcpy(pt->stay,p1->stay);strcpy(p1->stay,p2->stay);strcpy(p2->stay,pt->stay);
                strcpy(pt->clas,p1->clas);strcpy(p1->clas,p2->clas);strcpy(p2->clas,pt->clas);
                n=p2->sus;p2->sus=p1->sus;p1->sus=n;
                n=p2->phone;p2->phone=p1->phone;p1->phone=n;
                strcpy(pt->bed,p1->bed);strcpy(p1->bed,p2->bed);strcpy(p2->bed,pt->bed);
                        }
                  }
               }
                printf("排序成功!!");
                printf("\n");
                p0=head;
                printf("学号   姓名\t所在系\t班级\t宿舍号\t电话\t床号\n");
                while(p0->next!=NULL)
        {printf("%d\t%s\t%s\t%s\t%d\t%d\t%s\n",p0->num,p0->name,p0->stay,p0->clas,p0->sus,p0->phone,p0->bed);
                        printf("\n");
                        p0=p0->next;
                }
       }
}

void view()                                /*定义学生信息显示功能函数*/
{        FILE *fp;
        char ch;
        fp=fopen("wzw","r");
        ch=fgetc(fp);
system("cls");
        printf("学号      姓名\t   所在系    班级\t宿舍号\t 电话号码 床号\n");
        while(ch!=EOF)
        {       
putchar(ch);
                ch=fgetc(fp);
        }
        fclose(fp);
        printf("\n");
}
这个程序 添加信息后怎么保存啊??我想下次打开后能直接查找宿舍信息

零少 发表于 2014-7-7 00:44:44


#include<stdio.h>
#include"windows.h"
#include<stdlib.h>
#include<string.h>
#define pass 12345   //密码设定//
#define M 2000      //数据容量//
int data,i;       //定义全局变量data和i//
struct xinxi      //定义结构体//
{
        char sushe; //宿舍//
        char name;//姓名//
        char zhuan; //专业//
        char num; //学号//
        char tel; //电话//
}xin;//结构体数组//
int main()   //主函数//
{
void zhuti();//主体函数声明//
int min,a=4;    //a为密码最多输入次数//                  
printf("******************************************************\n"); //页面//
printf("*               欢迎来到神兽宿舍管理系统             *\n");
printf("*                      ||   ||                  *\n");
printf("*               ┏━━━━ ━━━━┓            *\n");
printf("*               ┃    ━      ┃            *\n");
printf("*               ┃  ┳┛ ┗┳ ┃            *\n");
printf("*               ┃          ┃            *\n");
printf("*               ┃    ┻   ┃            *\n");
printf("*               ┃          ┃            *\n");
printf("*               ┗━━━━ ━━━━┛            *\n");
printf("*                                           土豪版*\n");
printf("******************************************************\n");
system("pause");                              //任意键进入//
system("cls");
do{                                          //密码输入//
                printf(" 请输入登陆密码: ");
          scanf("%d",&min);
                if(!(min==pass)){ system("cls");
                         a=a-1;       
                                if(a==0)exit(0);
       printf(" 密码错误 还有%d次机会 ",a);         //密码错误a次后退出程序//
                   Sleep(1000);
                        system("cls");}
                system("cls");
        }while(!(min==pass));//输入正确进入主体函数//
    zhuti();
        return 0;}

void zhuti()   //主题函数//
{
   void xiugai();//修改函数声明//
   void luru();    //录入函数声明//
   void chaxun();//查询函数声明//
   void zonglan(); //总览函数声明//
   void shanchu(); //删除函声明//
        int c;
        char b;
for(c=1;c>0;c++)      //输入其他选项无限循环//
{       
        system("cls");
    printf("1.添加信息\n");
        printf("2.修改信息\n");
        printf("3.删除信息\n");
        printf("4.查找\n");
        printf("5.总览\n");
    printf("6.结束\n");
        printf("请输入服务项目:");
        getchar();   //得到个字符//
        b=getchar();//赋值给b变量//
        switch(b)
        {
        case 49 : luru();    //添加函数//
        case 50 : xiugai();//修改函数//
        case 51 : shanchu(); //删除函数//
    case 52 : chaxun();//查询函数//
        case 53 : zonglan(); //总览函数//
        case 54 : {system("cls");      
                     exit(0);} //退出函数//
    default : break;
        }
}
}


void luru()   //添加函数定义//
{
        void save();//存储函数声明//
        char ch;
        int n;
        FILE * fp;   //定义结构体指针//
        system("cls");
if((fp=fopen("data.dat","rb"))==NULL)      //第一次新建数据文件//
{       
       data=0; //data赋初值,0//
        fp=fopen("data.dat","wb");
        fwrite(&data,4,1,fp);
        fclose(fp);
}
   printf("输入数据个数:");
   scanf("%d",&n);
   system("cls");
for(i=0;i<n;i++)
{       
        fread(&data,4,1,fp);    //读出记录次数//
        fclose(fp);
   printf("宿舍号:");    //输入信息//
        scanf("%s",&xin.sushe);    //输入宿舍号//
   printf("姓名:");
    scanf("%s",&xin.name);   //输入姓名//
   printf("专业:");
    scanf("%s",&xin.zhuan);    //输入专业//
       printf("学号:");
    scanf("%s",&xin.num);   //输入学号//
   printf("电话:");
    scanf("%s",&xin.tel);   //输入电话//
    save();
    data=data+1;
        printf("\n");   
    if((fp=fopen("data.dat","wb"))==NULL)
        {printf("can't open file\n");
           exit(0); }
        fwrite(&data,4,1,fp);//写入次数//
        fclose(fp);}
        printf("数据已储存\n");
        if(data>=M-20)printf("数据存储空间不足,请及时清理。");
   Sleep(800);
   printf("是否继续?(y/n)\n");//Y继续 N退出//
   getchar();
   ch=getchar();
   if(ch=='y'||ch=='Y')//如果输入的字符为Y,再次进入录入函数。//
   {luru();}
   else if(ch=='n'||ch=='N')
   {system("cls");
   zhuti();}                  
   else
   {system("cls");
    zhuti();}                     //N 或其他字符 返回菜单//
}

void save() //存储函数定义//
{       
       FILE * fp_1;
        if((fp_1=fopen("xin.dat","ab"))==NULL) //用追加写入的方式打开信息的二进制文件//
        { printf("can't open file\n");}
    fseek(fp_1,data*sizeof(struct xinxi),0);
        if(fwrite(&xin,sizeof(struct xinxi),1,fp_1)!=1)//将数据写入信息的二进制文件//
        {printf("file write error\n");}
        fclose(fp_1); //关闭文件//
}


void chaxun() //查询函数定义//
{
       void search_sushe();//宿舍号查询声明//
       void search_xuehao(); //学号查询声明//
       void search_name();//姓名查询声明//
   char flag,h; //flag变量//
       do{                           //循环体,直到输入正确选项,循环结束//
         system("cls");
               printf("1.按学号查找\n");
         printf("2.按宿舍查找\n");
               printf("3.按姓名查找\n");
               printf("4.返回\n");
               printf("5.退出\n");
               printf("请输入选项:");
               getchar();
         h=getchar();
                switch(h)
                {
                case 49 : {flag=1;
                             search_xuehao(); }                //若输入字符1,进入学号查找函数。将1赋值给flag,跳出循环体。//
                case 50 : {flag=1;
                             search_sushe(); }       //若输入字符2,进入宿舍查找函数。将1赋值给flag,跳出循环体。//
      case 51 : {flag=1;
                                search_name(); }       //若输入字符3,进入姓名查找函数。将1赋值给flag,跳出循环体。//
                case 52 : zhuti();   //返回主体函数//
                case 53 : exit(0);    //退出程序//
      default:flag=0;   //输入其他字符,flag的值为0.//
                }
}while(flag==0);
       }


void search_xuehao()   //学号查询定义//
{
       FILE * fp_1, * fp; //定义结构体指针fp_1,fp.//
       int u=0;
       char a,ch_1;
       if((fp=fopen("data.dat","rb"))==NULL)//打开data文件//
       {   
               printf("cannot open file\n");
               exit(0);
       }
       fread(&data,4,1,fp);
       system("cls");
       printf("请输入学号:");
          scanf("%s",a);//输入字符串//
   printf("\n");
       if((fp_1=fopen("xin.dat","rb"))==NULL)//打开信息文件//
       {
         printf("没有相关数据\n");
         Sleep(1000);
               zhuti();
       }
       for(i=0;i<=data-1;i++)//由于data是加1存储,所以真正文件里的数据数量为data//
       {
                fseek(fp_1,i*sizeof(struct xinxi),0);
               fread(&xin,sizeof(struct xinxi),1,fp_1);
                if(strcmp(xin.num,a)==0)//将文件里的数据逐一与字符串a比较//
               {   
                       u=1;//若有相同的字符串,u值为1。//
                       printf("姓名:%s\n",xin.name); //输出信息//
                          printf("学号:%s\n",xin.num);
                     printf("专业:%s\n",xin.zhuan);
                          printf("电话:%s\n",xin.tel);
                       printf("宿舍号:%s\n",xin.sushe);
                       printf("\n");
               }
       }
   fclose(fp);//关闭数据文件//
       fclose(fp_1);//关闭信息文件//
               if(u==0)//若没有相同字符串,会到主体函数。//
                {printf("没有相关信息\n");
                Sleep(1000);
                zhuti();}
       printf("是否继续?(Y/N)\n");
      getchar();
   ch_1=getchar();
      if(ch_1=='y'||ch_1=='Y')
       { search_xuehao();}
    else if(ch_1=='n'||ch_1=='N')
        {system("cls");
   zhuti();}                  
    else
    {system("cls");
    search_xuehao();}                     
}



void search_sushe()//宿舍查询定义//
{
       FILE * fp_1, * fp;
       int u=0;
       char a,ch_1;
       if((fp=fopen("data.dat","rb"))==NULL)
       {   
               printf("cannot open file\n");
               Sleep(1000);
               system("cls");
               zhuti();
       }
       fread(&data,4,1,fp);
       system("cls");
       printf("请输入宿舍:");
          scanf("%s",a);
   printf("\n");
       if((fp_1=fopen("xin.dat","rb"))==NULL)
       {
         printf("没有相关数据\n");
         Sleep(1000);
                   system("cls");
                  zhuti();
       }
       for(i=0;i<=data-1;i++)
       {
                fseek(fp_1,i*sizeof(struct xinxi),0);
               fread(&xin,sizeof(struct xinxi),1,fp_1);
                if(strcmp(xin.sushe,a)==0)
               {   
                       u=1;
                       printf("姓名:%s\n",xin.name);
                          printf("学号:%s\n",xin.num);
                     printf("专业:%s\n",xin.zhuan);
                          printf("电话:%s\n",xin.tel);
                        printf("\n");
                }
       }
   fclose(fp);
       fclose(fp_1);
               if(u==0)
                {printf("没有相关信息\n");
                Sleep(1000);
                system("cls");
               chaxun();}
       printf("是否继续?(Y/N)\n");
      getchar();
   ch_1=getchar();
      if(ch_1=='y'||ch_1=='Y')
       { search_sushe();}
    else if(ch_1=='n'||ch_1=='N')
        {system("cls");
   zhuti();}                  
    else
    {system("cls");
    search_sushe();}                     
}

void search_name()   //姓名查询定义//
{
       FILE * fp_1, * fp;
       int u=0;
       char a,ch_1;
       if((fp=fopen("data.dat","rb"))==NULL)
       {   
               printf("cannot open file\n");
               exit(0);
       }
       fread(&data,4,1,fp);
       system("cls");
       printf("请输入姓名:");
          scanf("%s",a);
   printf("\n");
       if((fp_1=fopen("xin.dat","rb"))==NULL)
       {
         printf("没有相关数据\n");
         Sleep(1000);
                   system("cls");
               zhuti();
       }
       for(i=0;i<=data-1;i++)
       {
                fseek(fp_1,i*sizeof(struct xinxi),0);
               fread(&xin,sizeof(struct xinxi),1,fp_1);
                if(strcmp(xin.name,a)==0)
               {   
                       u=1;
                       printf("姓名:%s\n",xin.name);
                          printf("学号:%s\n",xin.num);
                     printf("专业:%s\n",xin.zhuan);
                          printf("电话:%s\n",xin.tel);
                       printf("宿舍号:%s\n",xin.sushe);
                       printf("\n");
               }
       }
   fclose(fp);
       fclose(fp_1);
               if(u==0)
                {printf("没有相关信息\n");
                Sleep(1000);
                zhuti();}
       printf("是否继续?(Y/N)\n");
      getchar();
   ch_1=getchar();
      if(ch_1=='y'||ch_1=='Y')
       { search_xuehao();}
    else if(ch_1=='n'||ch_1=='N')
        {system("cls");
   zhuti();}                  
    else
    {system("cls");
   search_name();}                     
}

void shanchu()//查询函数定义//
{
          char ch;
    system("cls");
        printf("1.全部删除\n");
        printf("2.返回\n");
        printf("请输入选项:");
        getchar();
        ch=getchar();
        switch(ch)
        {
        case 49 : { remove("data.dat");//删除数据文件//
                        remove("xin.dat");//删除信息文件//
                           printf("数据已删除");
                          Sleep(1000); }
        case 50 : zhuti();
        default : shanchu();
        }
}

void xiugai()
{   
          char ch;
          void xiugai_xuehao();
          void xiugai_name();
          system("cls");
          printf("1.按学号查找修改\n");
      printf("2.按姓名查找修改\n");
          printf("3.返回\n");
          printf("请输入选项:");
       getchar();
       ch=getchar();
        switch(ch)
        {
        case 49 : xiugai_xuehao();
        case 50 : xiugai_name();
    case 51 : zhuti();
        default : xiugai();
        }
}

void xiugai_name()//修改函数定义//
{   
          char ch,a;
          int u=0;
          FILE * fp,* fp_1;
       if((fp=fopen("data.dat","rb"))==NULL)//打开数据文件//
       {
               printf("cannot open file\n");
               Sleep(1000);
               system("cls");
                zhuti();
       }
       fread(&data,4,1,fp); //读出data的值//
      system("cls");
       fclose(fp);//关闭数据文件//
          if((fp_1=fopen("xin.dat","rb"))==NULL)//打开数据文件//
       {
         printf("没有相关数据\n");
         Sleep(1000);
                   system("cls");
               zhuti();
       }
          printf("输入要修改人员的姓名:");
          scanf("%s",a);//输入字符串//
          printf("\n");
          for(i=0;i<=data-1;i++)
          {
                  fseek(fp_1,i*sizeof(struct xinxi),0);
               fread(&xin,sizeof(struct xinxi),1,fp_1);
               if(strcmp(xin.name,a)==0) //若数据文件里有相关信息//
               {                                             
                       u=1;   //u赋值为1//               
                          printf("\n宿舍号:%s\n",xin.sushe);
                       printf("姓名:%s\n",xin.name);
                printf("学号:%s\n",xin.num);
                 printf("专业:%s\n",xin.zhuan);
                printf("电话:%s\n",xin.tel);
                printf("是否要修改以上信息?(Y/N)\n");//询问是否修改//
                      getchar();
                     ch=getchar();
             if(ch=='y'||ch=='Y') //确认修改//
               {
                  printf("请输入新信息\n");//输入新信息//
             printf("宿舍号:");
                  scanf("%s",xin.sushe);
            printf("姓名:");
             scanf("%s",xin.name);
            printf("学号:");
             scanf("%s",xin.num);
            printf("专业:");
             scanf("%s",xin.zhuan);
                  printf("电话:");
             scanf("%s",xin.tel);
               }
               }                                 
                }
          fclose(fp_1); //关闭信息文件//
          if(u==1) //若信息文件里有相关信息//
          {
               remove("xin.dat");//删除原文件//
          for(i=0;i<=data-1;i++)
          {   
                  if((fp_1=fopen("xin.dat","ab"))==NULL)//新建信息文件//
                  { printf("can't open file\n");}
      fseek(fp_1,i*sizeof(struct xinxi),0);
             if(fwrite(&xin,sizeof(struct xinxi),1,fp_1)!=1)//重新导入新信息//
                {printf("file write error\n");}
             fclose(fp_1); //关闭信息文件//
          }
             printf("修改成功\n");
               system("pause"); //任意键进入//
          }         
          if(u==0)printf("没有相关信息\n");//如果没有相关信息,给予提示。//
          Sleep(1500);
       system("cls");
          zhuti(); //返回主体函数//
}


void xiugai_xuehao()//修改函数定义//
{   
          char ch,a;
          int u=0;
          FILE * fp,* fp_1;
       if((fp=fopen("data.dat","rb"))==NULL)//打开数据文件//
       {
               printf("cannot open file\n");
               Sleep(1000);
               system("cls");
                zhuti();
       }
       fread(&data,4,1,fp); //读出data的值//
      system("cls");
       fclose(fp);//关闭数据文件//
          if((fp_1=fopen("xin.dat","rb"))==NULL)//打开数据文件//
       {
         printf("没有相关数据\n");
         Sleep(1000);
                   system("cls");
               zhuti();
       }
          printf("输入要修改人员的学号:");
          scanf("%s",a);//输入字符串//
          printf("\n");
          for(i=0;i<=data-1;i++)
          {
                  fseek(fp_1,i*sizeof(struct xinxi),0);
               fread(&xin,sizeof(struct xinxi),1,fp_1);
               if(strcmp(xin.num,a)==0) //若数据文件里有相关信息//
               {                                             
                       u=1;   //u赋值为1//               
                          printf("\n宿舍号:%s\n",xin.sushe);
                       printf("姓名:%s\n",xin.name);
                printf("学号:%s\n",xin.num);
                 printf("专业:%s\n",xin.zhuan);
                printf("电话:%s\n",xin.tel);
                printf("是否要修改以上信息?(Y/N)\n");//询问是否修改//
                      getchar();
                     ch=getchar();
             if(ch=='y'||ch=='Y') //确认修改//
               {
                  printf("请输入新信息\n");//输入新信息//
             printf("宿舍号:");
                  scanf("%s",xin.sushe);
            printf("姓名:");
             scanf("%s",xin.name);
            printf("学号:");
             scanf("%s",xin.num);
            printf("专业:");
             scanf("%s",xin.zhuan);
                  printf("电话:");
             scanf("%s",xin.tel);
               }
      else if(ch=='n'||ch=='N')//不修改//
                {system("cls");
         zhuti();}                  
      else
                {system("cls");//输入其他字符,返回修改函数。//
         xiugai();}         
               }                                 
                }
          fclose(fp_1); //关闭信息文件//
          if(u==1) //若信息文件里有相关信息//
          {
               remove("xin.dat");//删除原文件//
          for(i=0;i<=data-1;i++)
          {   
                  if((fp_1=fopen("xin.dat","ab"))==NULL)//新建信息文件//
                  { printf("can't open file\n");}
      fseek(fp_1,i*sizeof(struct xinxi),0);
             if(fwrite(&xin,sizeof(struct xinxi),1,fp_1)!=1)//重新导入新信息//
                {printf("file write error\n");}
             fclose(fp_1); //关闭信息文件//
          }
             printf("修改成功\n");
               system("pause"); //任意键进入//
          }         
          if(u==0)printf("没有相关信息\n");//如果没有相关信息,给予提示。//
          Sleep(1500);
       system("cls");
          zhuti(); //返回主体函数//
}


void zonglan() //总览函数定义//
{
   FILE * fp_1, * fp;
       if((fp=fopen("data.dat","rb"))==NULL) //打开数据文件//
       {   
               printf("cannot open file\n");
               Sleep(1000);
               system("cls");
                zhuti();
               }
       fread(&data,4,1,fp); //读出数据文件//
   system("cls");
if((fp_1=fopen("xin.dat","rb"))==NULL) //打开信息文件//
       {
         printf("没有相关数据\n");
         Sleep(1000);
                   system("cls");
               zhuti();
       }
       for(i=0;i<=data-1;i++)//将信息文件的信息逐一写出//
       {
                fseek(fp_1,i*sizeof(struct xinxi),0);
               fread(&xin,sizeof(struct xinxi),1,fp_1);
                       printf("姓名:%s\n",xin.name);
                          printf("学号:%s\n",xin.num);
                     printf("专业:%s\n",xin.zhuan);
                          printf("电话:%s\n",xin.tel);
                       printf("宿舍号:%s\n",xin.sushe);
                       printf("\n");
       }fclose(fp);//关闭数据文件//
           fclose(fp_1);//关闭信息文件//
      system("pause");
                zhuti(); //返回主体函数//
}

送你个可以用文本保存的吧:sweat:

戏++ 发表于 2014-7-7 10:26:15

太多了,看着眼花,把问题简化啊

longtian 发表于 2014-7-7 10:59:36

添加数据存储,通过文件File *file写入txt,保存.或是excel,或者用数据库,简单的access,复杂些的sql,mysql

计机羊咩咩 发表于 2014-8-2 15:19:35

你可以设计一个算法,以指针数组为一个表(一个系)每一个数组元素又指向这个班的file,然后这个班的file就是所有同学的信息,最后再写个函数新建一份系统资料(file)来存储各种系统信息如已经有多少个班每个班有多少个同学 ,当然这一切都得注意格式了哈。
页: [1]
查看完整版本: C语言 求解