文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言程序设计报告

2024-04-02 19:55

关注

C语言程序设计报告


    经过上次的飞机游戏制作,使我感觉到C语言程序设计,更加的有趣,也使我对这门课程有了更深的理解和认识。这次我们学习了学习C语言操作文件永久保存数据和基于函数的结构化大型程序的编写方法。这次的学习也比较上次来说显得有些复杂。

   这次要做的是一个关于书本的管理系统。可以让我们更加方便的去利用程序查找书本存放的位置和一些基本的信息。

  首先建立基本的函数公式:

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"conio.h"

#define PAGE 3

#define MAX 1000

#define N 5

int k=0;

 

 然后定义我们所要设计和查找的变量:

typedef struct  

{   int num;

    char name[50];

char type[40];

int time;

char place[50];

char writer[50];

}STUDENTS;

 这两步对于制作数据库来说十分的重要,也是整个程序的基础和地基,所以这两步绝对不能出错否则后面也将无法进行。从这之后便真正开始数据库的制作。

int read_file(STUDENTS stu[])

{ FILE *fp;

    int i=0;

if((fp=fopen("stu.txt","rt"))==NULL)

{printf("\n\n*****库存文件不存在!请创");

return 0;

}

while(feof(fp)!=1)

    {

fread(&stu[i],sizeof(STUDENTS),1,fp);

if(stu[i].num==0)

break;

else

i++;

}

fclose(fp);

return i;

}

void save_file(STUDENTS stu[],int sum)

{FILE*fp;

 int i;

 if((fp=fopen("stu.txt","wb"))==NULL)

 {printf("写文件错误!\n");

  return;

 }

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

  if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)

  printf("写文件错误!\n");

  fclose(fp);

}

这一步是当数据库中并没有数据存储的情况下而让程序自己转到输入数据界面的程序,如若有数据存储那么再打开以后便不会转到存储界面。

 接着上面如若没有数据转移到输入数据的界面,所以我们为了使输入界面更加简洁开始编辑界面环境:

int input(STUDENTS stu[])

{  int i,x;

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

   {

    system("cls");  

    printf("\n\n                 录入书本信息\n",MAX);

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

   

        printf("\n                     第%d本书",k+1);

   printf("\n 请输入书本的编号:");

        scanf("%d",&stu[k].num);

        printf("\n 请输入书本的名称:");

        scanf("%s",stu[k].name); 

  printf("\n 请输入书本的类型:");

        scanf("%s",stu[k].type);

        printf("\n 请输入书本的出版时间:");   

        scanf("%d",&stu[k].time);  

        printf("\n 请输入书本的位置:");

        scanf("%s",stu[k].place);        

        printf("\n 请输入书本的作者:");

        scanf("%s",stu[k].writer);

        printf("\n 请按1键返回菜单或按0键继续创建");

scanf("%d",&x);

if(x)

 break;

   }

      

       return k;

}

这样我们就可以按照我们所需要的将书本的信息一步一步的输入近数据库中,并且还能够随时返回初始界面。但是,说到创建数据就不得不提到删除数据,所以接下来制作删除数据的程序便是我们先要解决的:

void deletel(STUDENTS stu[])

  { system("cls"); 

   char Stuname2[20];

   int i,j;

   printf("请输入书本名称:");

   scanf("%s",Stuname2);

   printf("\n");

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

   if(strcmp(stu[i].name,Stuname2)==0)   

     for(j=0;j<20;j++)

       stu[i].name[j]=stu[i+1].name[j];

   k--;

  

   printf("删除成功\n");

   printf("按任意键加回车返回主菜单!");

   scanf("%d",&i);

   getchar();

}

这个完成之后我们的数据库就算是基本上完成了。但日后要查找数据可能不仅仅是查找那么简单,有可能需要进行打印之类的工作。为了方便使用。我们也将编入打印所需的程序,是这个程序变得更方便。

void output(STUDENTS stu[])

{  system("cls");

   int i;

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

     printf("编号:%d,名称:%s,类型:%s,出版时间:%d,位置:%s,作家: %s\n",stu[i].num,stu[i].name,

 stu[i].type,stu[i].time,stu[i].place,stu[i].writer);

   printf("按任意键加回车返回主菜单!");

   scanf("%d",&i);

   getchar();

}

输入、删除、打印都完成了,接下来便是最关键的一步:查找。这一步相对于之前的几步来说算是最简单的了只需要把存入库中的数据输出即可:

void inquire(STUDENTS stu[]) 

  { int i;

    int num;

    system("cls");

    printf("     \n\n请输入您要查找的书本的编号");

    scanf("%d",&num);

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

      if(num==stu[i].num)

         printf("\n\n\n编号:%d,名称:%s,类型:%s,出版时间:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,

stu[i].type,stu[i].time,stu[i].place,stu[i].writer);

    printf("按任意键加回车返回主菜单!");

scanf("%d",&i); 

    getchar();

  }

查找完成之后我们便会发现,我们的数据中只存在创建和删除,然而对于书本来说修改是必不可少的,我们总不可能每次都将数据删除后再创建,太浪费时间了。所以还要做一个修改的程序:

void change(STUDENTS stu[])

  {  int num,i,choice;

     system("cls"); 

printf("\n\n\n      请输入您要修改的书本的编号");

     scanf("%d",&num);

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

     { if(num==stu[i].num)

         printf("\n编号:%d,名称:%s,类型:%s,出版时间:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,

stu[i].type,stu[i].time,stu[i].place,stu[i].writer);


     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("                 请选择(1-6):");

 scanf("%d",&choice);

 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].type); 

  break;

 }

  case 4:{

      printf("\n   请输入你改的新出版时间");

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

  break;

 }

  case 5:{

      printf("\n   请输入你改的新位置");

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

  break;

 }

  case 6:{

      printf("\n   请输入你改的新作家");

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

  break;

 }

 }

 

  printf("编号:%d,名称:%s,类型:%s,出版时间:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,

stu[i].type,stu[i].time,stu[i].place,stu[i].writer);

       printf("按任意键加回车返回主菜单!");

  scanf("%d",&i);

  break;

}

}


之后为了能方便的将数据列举出来做个列举的程序会使整个程序更完成:

void sort(STUDENTS stu[])

  {  int i,j,n=1,x;

     system("cls"); 

     int t;

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

for(j=i+1;j<k;j++)

if(stu[i].time<stu[j].time)

{ t=stu[i].time;

 stu[i].time=stu[j].time;

 stu[j].time=t;

              t=stu[i].num;

 stu[i].num=stu[j].num;

 stu[j].num=t;


}

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

printf("排名    编号    名称    日期\n %d       %d       %d       %d\n",n++,stu[i].num,stu[i].name,stu[i].time);

     printf("按任意键加回车返回主菜单!");

scanf("%d",&x);

     getchar();

  }

最后我们要装饰一下我们的主页面使其更美观:

void pagedis()

{

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

   printf("                   *                                *\n");

   printf("                   *                                *\n");

   printf("                   *                                *\n");

   printf("                   *     欢迎进入书本信息管理系统   *\n");

   printf("                   *                                *\n");

   printf("                   *                                *\n");

   printf("                   *                                *\n");

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

   

}

void check()

{

   char userName[5];

   char userPWD[5];

   int i,sum;

   system("color 4E");

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

   {

     

   printf("   用户名和密码均为abcde\n\n");

        printf("\n       请输入您的用户名:");

        gets(userName);

        

        printf("\n       请输入您的密码:");

        gets(userPWD);

        

        if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))

        {

            printf("用户名和密码正确,显示主菜单");

            return;

        }

        else

        {

            if (i < 3)

            {

                printf("用户名或密码错误,提示用户重新输入");

                printf("用户名或密码错误,请重新输入!");

            }

            else

            {

                printf("连续3次输错用户名或密码,退出系统。");

                printf("您已连续3次将用户名或密码输错,系统将退出!");

                exit(1); 

            }

        }

   }

}

void menu()

{

  STUDENTS stu[20];

  int choice,k,sum;

  sum=read_file(stu);

  if(sum==0)

   {  printf("首先录入基本库存信息!按回车后进入*****\n");

      getch();

 sum=input(stu);

   }

  

  do

  {  system("cls");  

     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: k=input(stu); break;

      case 2: output( stu) ; break;

      case 3: inquire(stu); break;

      case 4: change(stu); break;

      case 5: deletel(stu); break;

      case 6: sort(stu); break;

      case 0: break;

    }

  }while(choice!=0);

  save_file(stu,sum);

}

int main()

{  

  int i,sum;

  pagedis();

  check();

  menu();   

}

 关于这次的感想:这次的课程使我对C语言这个程序更加的刮目相看,没想到平常的那些看起来十分高级的查找系统也是通过这些基础的软件一点一点制作而成的。看起来复杂的东西只要拆开就会发现它十分的简单易懂。

下面是这次整个程序的完整程序:

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"conio.h"

#define PAGE 3

#define MAX 1000

#define N 5

int k=0;

 

typedef struct  

{   int num;

    char name[50];

char type[40];

int time;

char place[50];

char writer[50];

}STUDENTS;


int read_file(STUDENTS stu[])

{ FILE *fp;

    int i=0;

if((fp=fopen("stu.txt","rt"))==NULL)

{printf("\n\n*****库存文件不存在!请创");

return 0;

}

while(feof(fp)!=1)

    {

fread(&stu[i],sizeof(STUDENTS),1,fp);

if(stu[i].num==0)

break;

else

i++;

}

fclose(fp);

return i;

}

void save_file(STUDENTS stu[],int sum)

{FILE*fp;

 int i;

 if((fp=fopen("stu.txt","wb"))==NULL)

 {printf("写文件错误!\n");

  return;

 }

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

  if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)

  printf("写文件错误!\n");

  fclose(fp);

}



int input(STUDENTS stu[])

{  int i,x;

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

   {

    system("cls");  

    printf("\n\n                 录入书本信息\n",MAX);

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

   

        printf("\n                     第%d本书",k+1);

   printf("\n 请输入书本的编号:");

        scanf("%d",&stu[k].num);

        printf("\n 请输入书本的名称:");

        scanf("%s",stu[k].name); 

  printf("\n 请输入书本的类型:");

        scanf("%s",stu[k].type);

        printf("\n 请输入书本的出版时间:");   

        scanf("%d",&stu[k].time);  

        printf("\n 请输入书本的位置:");

        scanf("%s",stu[k].place);        

        printf("\n 请输入书本的作者:");

        scanf("%s",stu[k].writer);

        printf("\n 请按1键返回菜单或按0键继续创建");

scanf("%d",&x);

if(x)

 break;

   }

      

       return k;

}



void deletel(STUDENTS stu[])

  { system("cls"); 

   char Stuname2[20];

   int i,j;

   printf("请输入书本名称:");

   scanf("%s",Stuname2);

   printf("\n");

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

   if(strcmp(stu[i].name,Stuname2)==0)   

     for(j=0;j<20;j++)

       stu[i].name[j]=stu[i+1].name[j];

   k--;

  

   printf("删除成功\n");

   printf("按任意键加回车返回主菜单!");

   scanf("%d",&i);

   getchar();

}


                                                                                                                                                                                                                                                       

void output(STUDENTS stu[])

{  system("cls");

   int i;

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

     printf("编号:%d,名称:%s,类型:%s,出版时间:%d,位置:%s,作家: %s\n",stu[i].num,stu[i].name,

 stu[i].type,stu[i].time,stu[i].place,stu[i].writer);

   printf("按任意键加回车返回主菜单!");

   scanf("%d",&i);

   getchar();

}


void inquire(STUDENTS stu[]) 

  { int i;

    int num;

    system("cls");

    printf("     \n\n请输入您要查找的书本的编号");

    scanf("%d",&num);

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

      if(num==stu[i].num)

         printf("\n\n\n编号:%d,名称:%s,类型:%s,出版时间:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,

stu[i].type,stu[i].time,stu[i].place,stu[i].writer);

    printf("按任意键加回车返回主菜单!");

scanf("%d",&i); 

    getchar();

  }



void change(STUDENTS stu[])

  {  int num,i,choice;

     system("cls"); 

printf("\n\n\n      请输入您要修改的书本的编号");

     scanf("%d",&num);

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

     { if(num==stu[i].num)

         printf("\n编号:%d,名称:%s,类型:%s,出版时间:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,

stu[i].type,stu[i].time,stu[i].place,stu[i].writer);


     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("                 请选择(1-6):");

 scanf("%d",&choice);

 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].type); 

  break;

 }

  case 4:{

      printf("\n   请输入你改的新出版时间");

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

  break;

 }

  case 5:{

      printf("\n   请输入你改的新位置");

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

  break;

 }

  case 6:{

      printf("\n   请输入你改的新作家");

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

  break;

 }

 }

 

  printf("编号:%d,名称:%s,类型:%s,出版时间:%d,位置:%s,作者: %s\n",stu[i].num,stu[i].name,

stu[i].type,stu[i].time,stu[i].place,stu[i].writer);

       printf("按任意键加回车返回主菜单!");

  scanf("%d",&i);

  break;

}

}



void sort(STUDENTS stu[])

  {  int i,j,n=1,x;

     system("cls"); 

     int t;

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

for(j=i+1;j<k;j++)

if(stu[i].time<stu[j].time)

{ t=stu[i].time;

 stu[i].time=stu[j].time;

 stu[j].time=t;

              t=stu[i].num;

 stu[i].num=stu[j].num;

 stu[j].num=t;


}

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

printf("排名    编号    名称    日期\n %d       %d       %d       %d\n",n++,stu[i].num,stu[i].name,stu[i].time);

     printf("按任意键加回车返回主菜单!");

scanf("%d",&x);

     getchar();

  }


void pagedis()

{

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

   printf("                   *                                *\n");

   printf("                   *                                *\n");

   printf("                   *                                *\n");

   printf("                   *     欢迎进入书本信息管理系统   *\n");

   printf("                   *                                *\n");

   printf("                   *                                *\n");

   printf("                   *                                *\n");

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

   

}

void check()

{

   char userName[5];

   char userPWD[5];

   int i,sum;

   system("color 4E");

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

   {

     

   printf("   用户名和密码均为abcde\n\n");

        printf("\n       请输入您的用户名:");

        gets(userName);

        

        printf("\n       请输入您的密码:");

        gets(userPWD);

        

        if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))

        {

            printf("用户名和密码正确,显示主菜单");

            return;

        }

        else

        {

            if (i < 3)

            {

                printf("用户名或密码错误,提示用户重新输入");

                printf("用户名或密码错误,请重新输入!");

            }

            else

            {

                printf("连续3次输错用户名或密码,退出系统。");

                printf("您已连续3次将用户名或密码输错,系统将退出!");

                exit(1); 

            }

        }

   }

}

void menu()

{

  STUDENTS stu[20];

  int choice,k,sum;

  sum=read_file(stu);

  if(sum==0)

   {  printf("首先录入基本库存信息!按回车后进入*****\n");

      getch();

 sum=input(stu);

   }

  

  do

  {  system("cls");  

     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: k=input(stu); break;

      case 2: output( stu) ; break;

      case 3: inquire(stu); break;

      case 4: change(stu); break;

      case 5: deletel(stu); break;

      case 6: sort(stu); break;

      case 0: break;

    }

  }while(choice!=0);

  save_file(stu,sum);

}

int main()

{  

  int i,sum;

  pagedis();

  check();

  menu();   

}


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯