鱼C论坛

 找回密码
 立即注册
查看: 1491|回复: 4

C语言 求解

[复制链接]
发表于 2014-6-30 18:05:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[20];                                          /*姓名*/
        char stay[20];                                              /*所在系*/
        char clas[20];                                              /*班级*/
        int sus;                                    /*宿舍*/
        int  phone;                                 /*电话号码*/
        char bed[20];                                /*床位*/
        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请选择输入选项[1\\2\\3\\4\\5\\6]:>");
                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");
}
这个程序 添加信息后怎么保存啊??我想下次打开后能直接查找宿舍信息

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[20]; //宿舍//
        char name[40];  //姓名//
        char zhuan[40]; //专业//
        char num[40]; //学号//
        char tel[40]; //电话//
}xin[M];  //结构体数组//
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[data].sushe);    //输入宿舍号//
     printf("姓名:");
    scanf("%s",&xin[data].name);     //输入姓名//
     printf("专业:");  
    scanf("%s",&xin[data].zhuan);    //输入专业//
         printf("学号:");
    scanf("%s",&xin[data].num);     //输入学号//
     printf("电话:");
    scanf("%s",&xin[data].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[data],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[40],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[i],sizeof(struct xinxi),1,fp_1);
                if(strcmp(xin[i].num,a)==0)//将文件里的数据逐一与字符串a比较//
                 {   
                         u=1;  //若有相同的字符串,u值为1。//
                         printf("姓名:%s\n",xin[i].name); //输出信息//
                          printf("学号:%s\n",xin[i].num);
                     printf("专业:%s\n",xin[i].zhuan);
                          printf("电话:%s\n",xin[i].tel);
                         printf("宿舍号:%s\n",xin[i].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[20],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[i],sizeof(struct xinxi),1,fp_1);
                if(strcmp(xin[i].sushe,a)==0)
                 {   
                         u=1;
                         printf("姓名:%s\n",xin[i].name);
                          printf("学号:%s\n",xin[i].num);
                     printf("专业:%s\n",xin[i].zhuan);
                          printf("电话:%s\n",xin[i].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[40],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[i],sizeof(struct xinxi),1,fp_1);
                if(strcmp(xin[i].name,a)==0)
                 {   
                         u=1;
                         printf("姓名:%s\n",xin[i].name);
                          printf("学号:%s\n",xin[i].num);
                     printf("专业:%s\n",xin[i].zhuan);
                          printf("电话:%s\n",xin[i].tel);
                         printf("宿舍号:%s\n",xin[i].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[40];
          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[i],sizeof(struct xinxi),1,fp_1);
                 if(strcmp(xin[i].name,a)==0) //若数据文件里有相关信息//
                 {                                             
                         u=1;   //u赋值为1//               
                          printf("\n宿舍号:%s\n",xin[i].sushe);
                         printf("姓名:%s\n",xin[i].name);
                  printf("学号:%s\n",xin[i].num);
                 printf("专业:%s\n",xin[i].zhuan);
                  printf("电话:%s\n",xin[i].tel);
                printf("是否要修改以上信息?(Y/N)\n");//询问是否修改//
                      getchar();
                     ch=getchar();
             if(ch=='y'||ch=='Y') //确认修改//
                 {
                    printf("请输入新信息\n");  //输入新信息//
             printf("宿舍号:");
                    scanf("%s",xin[i].sushe);
            printf("姓名:");
             scanf("%s",xin[i].name);
            printf("学号:");
             scanf("%s",xin[i].num);
            printf("专业:");
             scanf("%s",xin[i].zhuan);
                    printf("电话:");
             scanf("%s",xin[i].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[i],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[40];
          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[i],sizeof(struct xinxi),1,fp_1);
                 if(strcmp(xin[i].num,a)==0) //若数据文件里有相关信息//
                 {                                             
                         u=1;   //u赋值为1//               
                          printf("\n宿舍号:%s\n",xin[i].sushe);
                         printf("姓名:%s\n",xin[i].name);
                  printf("学号:%s\n",xin[i].num);
                 printf("专业:%s\n",xin[i].zhuan);
                  printf("电话:%s\n",xin[i].tel);
                printf("是否要修改以上信息?(Y/N)\n");//询问是否修改//
                      getchar();
                     ch=getchar();
             if(ch=='y'||ch=='Y') //确认修改//
                 {
                    printf("请输入新信息\n");  //输入新信息//
             printf("宿舍号:");
                    scanf("%s",xin[i].sushe);
            printf("姓名:");
             scanf("%s",xin[i].name);
            printf("学号:");
             scanf("%s",xin[i].num);
            printf("专业:");
             scanf("%s",xin[i].zhuan);
                    printf("电话:");
             scanf("%s",xin[i].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[i],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[i],sizeof(struct xinxi),1,fp_1);
                         printf("姓名:%s\n",xin[i].name);
                          printf("学号:%s\n",xin[i].num);
                     printf("专业:%s\n",xin[i].zhuan);
                          printf("电话:%s\n",xin[i].tel);
                         printf("宿舍号:%s\n",xin[i].sushe);
                         printf("\n");
         }  fclose(fp);//关闭数据文件//
           fclose(fp_1);//关闭信息文件//
        system("pause");
                zhuti(); //返回主体函数//
  }

送你个可以用文本保存的吧:sweat:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-7 10:26:15 | 显示全部楼层
太多了,看着眼花,把问题简化啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-7 10:59:36 | 显示全部楼层
添加数据存储,通过文件File *file写入txt,保存.或是excel,或者用数据库,简单的access,复杂些的sql,mysql
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-2 15:19:35 | 显示全部楼层
你可以设计一个算法,以指针数组为一个表(一个系)  每一个数组元素又指向这个班的file,然后这个班的file就是所有同学的信息  ,最后再写个函数新建一份系统资料(file)来存储各种系统信息  如已经有多少个班  每个班有多少个同学 ,当然这一切都得注意格式了哈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 14:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表