标题:那位高手帮忙看下我这个程序错哪里了 帮忙改下 谢谢
只看楼主
xlb19910325
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-29
 问题点数:0 回复次数:0 
那位高手帮忙看下我这个程序错哪里了 帮忙改下 谢谢
#include <stdio.h>
#include <time.h>//时间函数
#include <string.h>
#include <stdlib.h>


FILE *fp;

struct computer//定义computer结构体
{
    int num;//计算机序号
    char zhuangtai[30];//状态
    char peizhi[40];//配置
   
}com[10];


struct record    //定义 record结构体           
{  
  int num1,num2; //计算机序号num1和学生学号num2
  char name[10],start[30],end[30];//学生姓名name、开始上机时间start、下机时间end  
}rec[10],rec1[10];

char * nowtime()//定义时间函数,调用系统时间
{   char tim[30];
    time_t it;
    time(&it);
    //printf("\t当前时间为北京时间%s\n",ctime(&it));//将时间转换为字符串
    strcpy(tim,ctime(&it));//将时间字符串复制给tim
    return 0;
}



int page()//优化函数,进度条显示
{
    int i;  
   
    printf("\n\n\n\n\n\n\n================系统启动中,请稍后……………………\n\n\n\n\n\n\n\n");
    for(i=0; i<39;i++)//表示循环40次
    {
        printf("==");
    }
   
    printf("=\r");

    for(i=0; i<40;i++)//表示循环40次
    {
        _sleep(20);//停止20毫秒

         printf(">>");
    }   
    return 0;
}


/*int pwdvalidate()   //密码验证程序,密码正确则返回0,错误则返回1
{
    FILE *pass;
    char pwd[9],pwdval[9],i;
    if((pass=fopen("paswd","rt"))==NULL)
        return 0;
        else
        {
            fgets(pwd,9,pass);
            for(i=1;i<=8;i++)
                pwd[i-1]-=2*i+3;            //密码解密
            printf("\n请输入密码\n");
            scanf("%s",&pwdval);
            if((strcmp(pwd,pwdval))==0)
                return 0;
                else
                    return 1;
        }
}*/


void save()
{
    FILE *fp;
    int i;
    if((fp=fopen("com_list.txt","r+"))==NULL)
    {
        printf("\n\n对不起无法打开源文件!!\n");
        return;
    }
    for (i=0;i<10;i++)

    if (fwrite(&com[i],sizeof(struct computer),1,fp)!=1)
        printf("file write error\n");
    fclose(fp);
}




void  luru()//定义计算机信息录入函数
{
  int i;
  char a;
  printf("\n\n\n\t\t\t!!!警告警告!!!\n\n\n\t您确认计算机信息已经失效,并且必须重新录入吗?\n");
  printf("\t确认重新输入请按Y,退出操作请按N:");
  scanf("%c",&a);
 while(a=='y'||a=='Y')
  {

    for(i=0;i<10;i++)
    {
      printf("\n请输入该计算机序号:");
       scanf("%d",&com[i].num);
      printf("请输入该计算机配制:");
       scanf("%s",com[i].peizhi);
      printf("请输入该计算机当前状态:");
      scanf("%s",com[i].zhuangtai);
      save();//将输入的数据读入文件(com_list.txt)中
    }
      printf("数据写入成功,按任意键返回主菜单!");
      getchar ();system("cls");break;
     //if(a=='n'||a=='N')
 }
 
}




/*void save()
{
    FILE *fp;
    int i;
    if((fp=fopen("com_list.txt","a+"))==NULL)
    {
        printf("\n\n对不起无法打开源文件!!\n");
        return;
    }

    if (fwrite(&com[i],sizeof(struct computer),1,fp)!=1)
        printf("file write error\n");
    fclose(fp);
}




void  luru()//定义计算机信息录入函数
{
  int i;
  char a;
  printf("\n\n\n\t\t\t!!!警告警告!!!\n\n\n\t您确认计算机信息已经失效,并且必须重新录入吗?\n");
  printf("\n\t确认重新输入请按Y,退出操作请按N:");
 
  a=getchar();
  printf("\n");
  if (a=='y'||a=='Y')
  {

        for(i=0;i<10;i++)
        {
          printf("\n请输入该计算机序号:");
           scanf("%d",&com[i].num);
          printf("请输入该计算机配制:");
           scanf("%s",com[i].peizhi);
          printf("请输入该计算机当前状态:");
          scanf("%s",com[i].zhuangtai);
          save();//将输入的数据读入文件(com_list.txt)中
        }
  
        printf("\n\t数据写入成功\n\t按任意键返回……");
        getch();
  }
  else if (a=='N'||a=='n')
  system("cls");//清屏
}*/




void quanbu()//定义全部显示函数
{   
    int i=0,comnum=0;

    fp=fopen("com_list.txt","r");
    printf("\n\n\n\t序号 \t配置\t\t\t\t\t状态\n\n");

    /*for(i=0;i<10;i++)
    {
      fread(&com[i],sizeof(struct computer),1,fp);//从文件中读取所有计算机的信息
      printf("\t%d\t%10s\t %10s\n\n",com[i].num,com[i].peizhi,com[i].zhuangtai);
    }//将所有计算机的信息显示在屏幕上

    fclose(fp);
    getch();
    printf("按任意键返回……");*/

  while(fread(&com[i],sizeof(struct computer),1,fp)==1)            //文件读取完毕后将返回0
        {
            printf("\t%d\t%10s\t %10s\n\n",com[i].num,com[i].peizhi,com[i].zhuangtai);
        
            comnum++;
        }
            printf("\n所有信息显示完毕!!共有%d台计算机\n\n按任意键返回……\n\n",comnum);
   
    fclose(fp);

   
   getchar();//按任意键返回
   system("cls");
}

  
  void dange()//定义单个查询函数
    {
      
        int i;
        char a;

        do//使用do while循环
        {
          printf("\n\n请输入需要查找的计算机序号(1-10):");
         
   
          scanf("%d",&i);
         
         
          fp=fopen("com_list.txt","r");

          printf("\n该计算机序号为:%d\n",com[i-1].num);
          printf("\n该计算机配置为:  %10s\n",com[i-1].peizhi);
          printf("\n该计算机当前状态为:%10s\n",com[i-1].zhuangtai);
         
                           
          printf("\n");
          printf("是否继续查询?是Y/否N:");
        
          a=getchar();
          system("cls");
   
          if(a=='N'||a=='n')//输入“n”或“N”返回主函数
              break;

        }while(a=='Y'||a=='y');//输入“y”或“Y”继续循环


        system("cls");//清屏
    }







void search()//定义计算机信息查找函数
{
    int i=0;
    char t;
    FILE *fp;
    if((fp=fopen("com_list.txt","r"))==NULL)//先判断文件是否存在
    {
        printf("\n\n\n\n\t对不起!!源文件遭到破坏,读取文件出错!!\n\n\n");
        printf("\t请在主菜单中选择1,重新录入计算机信息!!\n\n\t按任意键返回……");
        getchar();
        system("cls");
        return;
    }
    else
    {
        while((fread(&com[i],sizeof(struct computer),1,fp))==1)
            i++;
        printf("\n数据库载入完成\n");
    }
       while(1)
       {
   
        printf("\n\t\t【1】  查 询 所 有 计 算 机 信 息\n\n\t\t");
        printf("【2】  按 计 算 机 序 号 查 询\n\n\t\t");
        printf("【3】  返回主菜单\n\n\t\t");
        //查询的副菜单
        printf("请输入您需要的操作:");

        t=getchar();

        if (t=='1')
            quanbu();
        else if(t=='2')
               dange();
        else if(t=='3')
            system("cls");
             break;
       }
     
}




void shangji()//定义上机函数
{
   FILE *fp;
   int i=0;
   
   printf("\n请在输入您的信息后上机!!\n");
   printf("\n请输入您所用计算机的序号(1--10):");

   scanf("%d",&rec[i].num1);
   
   
   printf("\n输入您的学号:");
   scanf("%d",&rec[i].num2);

   printf("\n请输入您的姓名:");
   scanf("%s",rec[i].name);
   printf("\n");
   strcpy(rec[i].start,nowtime());//调用nowtime函数将时间的字符串复制给结构体中的start
   
   if((fp=fopen("lishi.txt","w"))==NULL)
    {
        printf("\n\n对不起无法打开源文件!!\n");
        return;
    }
   
   if((fwrite(&rec[i],sizeof(struct record),1,fp))!=1)
   
       printf("\n数据写入失败!!");
       fclose(fp);

          printf("\n\t%s您的计算机已经开通\n\n\t现在开始计时,请上机!\n",rec[i].name);
       printf("\n按任意键返回!\n");
       getchar();
system("cls");
}

   
      
      
void xiaji()//定义下机函数
{
    FILE *fp,*fp1;
   int i,ii,j;
    char a;
struct record rec1[10];

    printf("\n\n\n您是否要下机?(Y/N):");
     a=getchar();
     printf("\n");
   
        
   while(a=='y'||a=='Y')
    {
        fp=fopen("lishi.txt","rb");
        for(i=0;;i++)
        {if(fread(&rec1[i],sizeof(struct record),1,fp)==0)
              break;
        }
        fclose(fp);
   
        printf("\n\t请输入您所使用的计算机的序号:");
        scanf("%d",&ii);
        printf("\n");

        for(j=0;j<=i;j++)
            if(rec1[j].num1==ii)
                break;

       strcpy(rec1[j].end,nowtime());//将是时间字符串复制给结构体中的end
            
      fp1=fopen("lishi2.txt","a+");
       if(fwrite(&rec1,sizeof(struct record),1,fp)!=1)
        {
             printf("\n数据写入失败!!");
             break;
        }
    fclose(fp1);
             printf("\t%d号计算机已经被锁定,您可以下机了.\n\n",ii);
             break;
        if(a=='n'||a=='N')
        break;
    }
    printf("\n按任意键返回!\n");
    getchar();
    system("cls");
}

/*int search_cmp(char flag, int sear)
{
    int i=0;

    switch(flag)
    {
        case '1':
        
                if(sear==rec[i].num1)
                return 0;
                else
                return 1;
        case '2':
   
                 if(sear==rec[i].num2)
                 return 0;
                  else
                 return 1;
    }
    return 0;
}    */
            

int jishu()
{     
    int i;
    fp=fopen("lishi2.txt","rb");
        for(i=0;;i++)
        {
            if(fread(&rec1[i],sizeof(struct record),1,fp)==0)
                break;
        }
    return(i);
}



int lishi()
{
//    int sear;
//    int i,j,a;
    int j,i;
    system("cls");

    //printf("查找计算机信息\n");

    if((fp=fopen("lishi2.txt","rt"))==NULL)
    {
        printf("读取文件出错!\n");
        return 1;
    }
     fread(&rec1[i],sizeof(struct record),1,fp);

    //printf("\n\t\t【1】  按计算机序号查找\n\n\t\t【2】  按使用者学号查找\n");
//    printf("\n请选择需要查找的信息:");
    //scanf("%d",&a);
    //printf("\n请输入序号:\n");
    //scanf("%d",&sear);
    system("cls");
    printf("********************************计算机信息*********************************\n\n");   
   
       i=jishu();
   
     //if(a==1)
    //{
   
//    {
        for(j=0;j<=i;j++)
        {
            //if(sear==rec[j].num1)
            //{

            printf("计算机序号:%d\t",rec1[j].num1);
            
            printf("\n使用者姓名:%s",rec1[j].name);
            printf("\n使用者学号:%d",rec1[j].num2);
            printf("\n使用时间段:%s至",rec1[j].start);
            printf(" %s",rec1[j].end);
        //    }
        
        //}
    }

        

    /* else
     if(a==2)
     {
           for(j=0;j<=i;j++)
           {
                if(sear==rec1[j].num2)

                printf("计算机序号:%d\t",rec1[j].num1);
               
                printf("\n使用者姓名:%s",rec1[j].name);
                printf("\n使用者学号:%d",rec1[j].num2);
                printf("\n使用时间段:%s至",rec1[j].start);
                printf(" %s",rec1[j].end);
           }
     }  
   
    if(flag!=1)
        //printf("抱歉,未找到对应信息,请检查输入是否有误\n");*/
    printf("\n\n按任意键返回。。。\n");
    getchar();
    system("cls");
    return 0;
}




/*void lishi()//定义计算机历史信息查询函数
{
    FILE *fp;
    int i=0, num;
    char a;

    if((fp=fopen("lishi2.txt","rt"))==NULL)//检查文件
    {
        printf("\n\n\n\t对不起!!源文件没有录入数据或者遭到破坏,读取文件出错!!\n\n");
        printf("\t按任意键返回!");
        getch();
    }
    else
    {
        while((fread(&rec[i],sizeof(struct record),1,fp))==1)//读取文件成功进行下面的操作
        i++;
        printf("\n▲数据库载入完成,您现在可以查询计算机的历史记录了!!\n");
        
        do//使用用do while进行查询的循环操作
        {
            printf("\n\t请输入您要查询的计算机的序号:");
            scanf("%d",&num);
            num--;
            
            fp=fopen("lishi2.txt","at+");
            if(!fread(&rec[i],sizeof(struct record),1,fp))
                printf("Error\n");

            printf("\n\t%s曾经使用过%d号计算机\n",rec1[num].name,rec1[num].num1);
            printf("\n\t该学生学号为:%d\n",rec1[num].num2);
            printf("\n\t使用时间段为:%s至%s",rec1[num].start,rec1[num].end);

            printf("\n");

            printf("\n\t是否继续查询?是Y/否N:");
            
            a=getch();system("cls");
            printf("\n");

            if(a=='N'||a=='n')
            {system("cls");
            break;}

        }while(a=='Y'||a=='y');
    }
    system("cls");
}*/



char menu()//主菜单 显示主页面
{
    char sh;
    printf("◆◆◆◆◆◆◆◆◆◆◆◆◆计★算★机★管★理★系★统◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
    printf("********************************************************************************");
    printf("\t\t\t\t\t\t\t\t _______\n");
    printf("\t\t\t\t\t\t\t\t |制作者:薛某某|\n");
    printf("\t\t\t\t\t\t\t\t  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ");

    printf("\t\t【1】  录 入 计 算 机 信 息\n\n\t\t");
    printf("【2】  查 询 计 算 机 信 息\n\n\t\t");   
    printf("【3】  查 询 历 史 记 录\n\n\t\t");
    printf("【4】  上 机 登 记\n\n\t\t");
    printf("【5】  下 机 登 记\n\n\t\t");
    printf("【6】  退 出\n");
    printf("********************************************************************************");
  
    //nowtime();
    printf("请输入您需要的操作:");
    sh=getchar();//输入操作代码
    return (sh);//返回输入的操作代码
}

 void tuichu()
 {  

    printf("\n\n\n===================================感谢您的使用================================\n\n\n\n\n\n\n\n\n");

    printf("\t\t\t\t\t设计者:薛某某。\n\t\t\t\t\t");
}

   



void main()//主函数
{   
   
    char a;
    //page();
    system("cls");
    printf("\t=========================西安理工大学==========================\n\n");
   
   while (1)
   {
     
     a=menu();//根据menu返回的操作代码执行相应的case

     switch(a)//使用switch进行操作
     {
         case '1':
           system("cls");
           luru();
           break;
         case '2':
             system("cls");
           search();
           break;
         case '3':
             system("cls");
           lishi();
           break;
         case '4':
            system("cls");
           shangji();
           break;
         case '5':
            system("cls");
           xiaji();
           break;
         case '6':
           system("cls");
           tuichu();
           exit(0);
          default:
           printf("输入有误,请重新输入\n\n");
          continue;
     }
   }
}
搜索更多相关主题的帖子: computer 时间 record include 结构体 
2012-06-29 21:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-372517-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.382167 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved