C语言课程设计参考题目

一、工资管理系统

    1. 需求分析

工资信息存放在文件中,提供文件的输入、输出等操作;要实现浏览功能,提供显示、排序操作;而查询功能要求实现查找操作;另外还应该提供键盘式选择菜单以实现功能选择。

2、总体设计

整个系统可以分为信息输入、信息添加、信息浏览、信息排序、信息查询和信息统计模块。

3、详细设计

工资信息采用结构体数组:

Struct Salary_Info

{

   int Card_No;                   //工资卡号

   Char name[20];                 //姓名

   int month;                     //月份

   float Init_Salary;               //应发工资

   float Water_Rate;               //水费

   float Electric_Rate;             //电费

   float tax;                     //税金

   float Final_Salary;             //实发工资

}SI[MAX];  //SI[MAX]中每个数组元素对应一个职工工资信息

(1)主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。

(2)输入模块

   按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。

文件操作函数:fopen,fwrite,fclose.

税金的计算:

if(应发工资<=800)

        税金=0;

else if (应发工资>800&&应发工资<=1400)

   税金=(应发工资-800)*5%;

else if (应发工资>1400)

   税金=(应发工资-1400)*10%;

实发工资=应发工资-水费-电费-税金。

(3)添加模块

增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式(以”ab”方式打开文件)。

(4)浏览模块

分屏显示职工工资信息,可以指定10个1屏,按任意键显示下一屏。通过菜单选择按照工资卡号还是姓名浏览。如果按照卡号浏览,则显示的记录按照卡号升序输出;按照姓名浏览则按照字典序输出(调用排序模块的排序功能)。

(5)排序模块

排序模块提供菜单选择,实现按照工资卡号升序、实发工资降序以及姓名字典序排序。排序方法可以选择冒泡排序、插入排序、选择排序等。

(6)查询模块

实现按照工资卡号和姓名的查询,采用基本的查找方法即可。

(7)统计模块

输入起止月份,按照职工卡号和月份查询记录,把起止月份之间的实发工资金额累加。

附加:思考在数据输入及添加模块尾部添加排序功能,使得文件中的数据按照卡号排序。这样在查询模块和统计模块可以采用二分查找以提高效率。

二、校际运动会管理系统

1、需求分析

要记录比赛结果,可以查看参赛学校的信息和比赛项目信息,因而要实现文件的输入和输出功能;用户可以查询各个学校的比赛成绩,查看参赛学校信息和比赛项目信息等,因而要提供查找和显示功能;另外还应该提供键盘式选择菜单以实现功能选择。

2、总体设计

   系统被设计为信息输入模块、比赛结果录入模块和查询模块三个模块。

3、详细设计

   数据结构采用结构体数组,包括学校、项目、运动员三个结构体。

Struct athlete

{

  Char name[20];   //姓名

  Int age;         //年龄

  Char From[20];  //来自学校

}Athlete;   //运动员结构体

Struct item

{

  Char name[20];   //项目名

  Int* weight;     //在运行时根据用户的输入动态分配空间(各项目名次取法不同,weight所指空间依次存放第一名得分、第二名得分等)

Athlete* player;  //指向获奖运动员信息的指针

}Item;   //项目结构体

Struct university

{

   Char name[20];  //学校名

   Item *item;     //竞赛项目指针,根据用户输入动态分配空间

   Int score;       //学校得分

}Uni;  //学校结构体

Item TotalItem[ItemNum];   //项目结构体数组

Uni AllUni[UniNum];      //学校结构体数组

(1)主函数     

提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。  

(2)信息输入模块

输入参赛学校总数,M-男子参赛项目数,W-女子参赛项目数。

把参赛学校信息和项目信息以及运动员信息录入文件(fwrite),建立三个文件。

例如第i个项目:

Scanf(“%s”,TotalItem[i].name);   //输入项目名

Ch=Getchar();   //通过输入1,2,3来选择项目名次取法

Switch(ch)

{

   Case ‘1’: n=5;break;

   Case ‘2’: n=3; break;

   Case ‘3’: printf(“取前几名?”,&n); break;

   Default: break;

}

TotalItem[i].weight=new int[n];

TotalItem[i].athlete=NULL;  //指向获奖运动员信息,初始化为空

然后写入文件:fp=fopen(“item.txt”,”wb”);

fwrite(&TotalItem[i],sizeof(Item),1,fp);

学校信息和运动员信息的录入与此类似。

(2)比赛结果录入模块

     通过菜单选择进入比赛结果录入模块,更改TotalItem[i].athlete的值,并把获奖名单保存到项目文件中。项目文件格式为:项目名  项目权值(按照第一名、第二名…给出权值) 获奖运动员信息(按照第一名、第二名…给出)   

(3)查找模块

查找学校信息文件,生成团体总分报表;用基本查找算法查询参赛学校信息(按照校名查找)或者比赛项目信息(按照项目名)。

三、学生学籍信息管理系统设计

1、需求分析

学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。

2、总体设计

   整个系统可以设计为数据录入模块、数据查询模块、数据删除模块和数据排序模块。

3、详细设计

   设计学生基本信息和学生成绩基本信息结构体数组。

Struct

{

  int stuNo;        //学号

  char name[20];   //姓名

  char sex[2];     //性别

  int  domNum;   //宿舍号

  int  tel;        //电话号码

}StuInfo;   //学生基本信息结构体

Struct

{

  int stuNo;     //学号

  char courseNo;  //课程编号

  char courseName; //课程名称

  int creditHour; //学分

Int triGrade; //平时成绩

Int experiGrade; //实验成绩

Int examGrade; //卷面成绩

Float totalGrade; //综合成绩

Float finalCreHour; //实得学分

}StuGraInfo; //学生成绩基本信息结构体

(1)数据录入模块

学生基本信息文件可以在磁盘建立,采用写文件方式录入学生成绩基本信息。综合成绩和实得学分通过计算得到。

(2)查询模块

通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,按照基本查找算法查找A.TXT,然后把查找结果输出若选择后者,则先在A.TXT中查找学号对应的姓名,再在B.TXT中查找该学生的课程情况,并统计科目和实得总学分,输出结果。(fread和查找算法的应用)

(3)删除模块

通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在A.TXT和B.TXT中查找该生信息,删除之;或者输入学生的姓名,先在A.TXT中得到该生的学号,删除该生信息,再在B.TXT中删除该学号对应的信息。注意:C语言中没有直接删除信息的函数,需要自己实现,可以采取读出数据,判断数据(如果不删除,则进入缓冲区,否则删除),写入数据(把缓冲区中的数据写入文件)的步骤进行。

(4)排序模块

通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果。首先要读文件(fread)。

四、一种简单的英文词典排版系统实现

1、需求分析

   运行结果以文本形式存储,因而要提供文件的输入输出操作;检查重复单词要提供查找操作;按A-Z的顺序排版,要提供排序操作;添加新单词并重新排版要提供插入操作。另外通过键盘式菜单实现功能选择。

2、总体设计

    整个系统被设计为单词录入模块、文件存储模块和单词浏览模块。其中单词录入模块要完成输入单词、检查是否重复、排序操作。文件存储模块把存放单词的数组中的数据写入文件。单词浏览模块完成英文词典的输出,即文件的输出操作。

3、详细设计

数据结构采用指针数组或二维数组:char* dictionary[N];  或 char dictionary[N][20]。其中N是宏定义#define N 100  (表示单词个数)

(1)单词录入模块

     输入一个单词,存放在一个临时字符数组中,以空格或回车表示单词的结束(这也是默认操作),然后换行输出刚刚输入的单词。采用插入排序算法的思想把该单词插入单词数组中,不同的是如果两个单词相同则不插入。

(2)文件存储模块

     采用fwrite或fprintf把单词数组输入到文件中。

(3)单词浏览模块

采用fread或fscanf把单词从文件中读出,然后输出。

五、一担挑游戏

1、数据结构

   数据结构定义为二位数组:char  chess_board[3][3]; 元素初始化为’ ’。

2、算法流程

   Main()

   {

     char  chess_board[3][3]={‘’};     //定义棋盘,并初始化为空;

while(未结束)

{

       输出棋盘;

      //用flag标志移动方,0表示计算机走棋,1表示对弈者走棋

      If(flag==0)    //计算机走棋

      {

         扫描棋盘矩阵;

         If(存在空单元)

           {

            置该单元为’O’;

            If(有三个’O’在一条线上)

            {

                输出棋盘矩阵;

                 输出“计算机赢!”;退出程序;

              }

            Flag=1;        //下一步轮到对弈者走棋

           }

         Else

            报告平局,退出程序。

      }

     Else            //对弈者走棋

{

        扫描棋盘矩阵;

         If(存在空单元)

           {

            置该单元为’X’;

            If(有三个’X’在一条线上)

            {

                输出棋盘矩阵;

                输出“恭喜你,你赢了!”;退出程序;

            }

            Flag=0;        //下一步轮到计算机走棋

           }

         Else

            报告平局,退出程序。

    }   //else

   }  //while

}   //main

其中扫描棋盘矩阵可以自行设计函数,最简单的方式是按行或按列扫描棋盘,找到空位就布棋;判断三点是否连成一条直线的操作比较简单,读者自己思考。

六、通讯录管理系统

1、需求分析

   信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按人名或电话号码进行查询的功能,因而要提供查找操作;另外还应该提供键盘式选择菜单以实现功能选择。

2、总体设计

   整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块和数据查询模块。

3、详细设计

   采用结构体数组。

Struct

{

  Char name[20];    //人名

  Char post[20];     //工作单位

  Int  tel;         //电话号码

  Char email[20];   //email地址

}TelInfo;   //电话簿信息结构体

TelInfo telInfo[N];   //电话簿信息结构体数组

(1)数据插入模块

输入数据,然后采用追加方式写文件(以”wb”方式打开文件,再用fwrite写入)。

(2)数据修改模块

通过菜单选择修改姓名、电话号码。可以把要修改的姓名或电话号码存储在临时变量里面,然后读文件,找到要修改的记录,把该记录重新以新的值写入。

(3)数据删除模块

删除一条记录,则输入要删除的人名,然后读文件,把文件中读出来的记录的人名与待删除的人名比较,如果不匹配,则重新写入文件;否则舍弃不再写入文件。

(4)数据显示模块

    采用分屏显示,每屏10条记录。用fread或fscanf读文件,输出结果。

(5)数据查询模块

用基本查找算法对电话簿实现按人名或电话号码的查询(读文件,把读出记录得相应字段与输入的查询字段比较),并把结果输出。

   

七、投票程序

1、需求分析

实现键盘输入投票人数和投票结果,进行统计时实现排序功能,输出结果。

2、总体设计

   该程序可以分为数据输入部分和统计部分。

3、详细设计

   采用结构体:

 Struct

{

  Char code;  //代号

  Int  score;  //得分

}Candidates[N];  //候选人结构体数组

这里#define N 3;

  采用二维数组,则行方向对应一张投票,列方向对应各候选人得分。

  Candidate[M][N];   

 (1)输入部分

  Char tmp[3];   //存放投票的中间变量

输入投票人数n;

  For(i=0;i<n;++i)   //投票

 {

   Scanf(“%s”,tmp);

 If(tmp[0]==tmp[1]||tmp[1]==tmp[2]||tmp[0]==tmp[2])

 Printf(”该票无效!”);

 Else

 {

      Tmp[0]号候选人加5分;

      Tmp[1]号候选人加3分;

      Tmp[2]号候选人加2分;

   }

}

 (2)统计部分

对候选人按照他们的得分排序(冒泡、插入、选择等),然后比较前两名得分是否相同。如果相同,则显示“重新投票”;否则显示三个候选者得分并输出“祝贺X当选冠军”,X为最高分候选者。

八、销售管理系统

问题分析:

数据结构采用结构体,设计便条结构体:

   Struct sellNote

{

    Int sellerNo;  //销售员代号(1-4)

    Int proNo;   //产品代号(1-5)

    Float sellMoney;   //销售额

}SNote;

便条信息采用文件存储,实现建立文本文件。

主函数输出提示菜单,让用户选择查看不同信息。

(1)个人销售额查看

计算上个月每个人每种产品的销售额。设立count[4][5],用来存储4个销售员的5种产品的销售额。读文件,把相同销售员的相同产品的销售额累加,写入count中。最后count[i][j]中存放的就是第i+1个销售员的第j+1种商品的销售额。

(2)销售额排序

  类似个人销售额的计算,这里把一个销售员的所有产品的销售额累加,存放到一个临时数组中,再对数组进行排序即可。

(3)产品销售额

操作与(2)类似。

(4)统计报表

可以先采用(1)的操作,再对count数组计算。count[i][0]+ count[i][1]+ count[i][2]+ count[i][3]+ count[i][4]既是第i个销售员的销售之和,count[0][j]+ count[1][j]+ count[2][j]+ count[3][j]+ count[4][j]既是第j种产品的销售之和。所有count[i][j]的和既是总和。另外注意输出格式。

九、学生选修课程系统设计

1、需求分析

    系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。

2、总体设计

   整个系统可以设计为信息输入模块、信息查询模块以及信息浏览模块。

3、详细设计

   数据结构采用结构体,这里采用课程信息结构体和学生选课信息结构体。

 Struct

{

  Char courseCode[10];   //课程编号

  Char courseName[20];  //课程名称

  Char courseType[10];  //课程类别

  Int  totalPeriod;      //总学时

  Int  classPeriod;     //授课学时

  Int  experiPeriod;    //上机学时

  Float creditHour;    //学分

  Int  term;         //开课学期

}CourseInfo[N];   //课程信息结构体

Struct

{

  Int stuNo;  //学号;

  Char courseCode[10];   //课程编号

}StuCourInfo[N]; //学生选课信息结构体

(1) 信息输入模块

  从键盘输入课程信息和学生选课信息,写入文件。(fwrite, fprintf)

(2)信息浏览模块

  分屏显示课程信息,每屏10条课程记录,按任意键继续。从文件中读数据(fread,fscanf),然后再显示。

(3)信息查询模块

   通过菜单选择查询字段,可以按照课程编号、课程名称、课程性质、开课学期、学分对课程信息文件进行查找,查找算法可以选择基本查找、二分查找等算法。

   可以通过菜单选择课程编号,在学生选课信息文件中查询该课程学生选修情况。

十、飞机订票系统设计

1、需求分析

    航班信息用文件保存,因而要提供文件的输入输出操作;航班信息浏览功能需要提供显示操作;要查询航线需要提供查找功能;另外要提供键盘式选择菜单以实现功能选择。

2、总体设计

   该系统设计为航班信息输入模块、航班信息浏览模块和航线查询模块。

3、详细设计

   数据结构采用结构体数组,设计航班结构体如下:

Struct

{

   Char flightNo[10];   //航班号

   Char start[10];      //起始站

   Char end[10];       //终点站

   Float day;          //飞行时间

   Int  totalTicket;     //预售票总数

   Int  sellTicket;      //已售票总数

}Flight[N];  //航班结构体

(1)航班信息输入模块

采用fwrite或fprintf把航班信息写入航班信息文件。

(2)航班信息浏览模块

    分屏显示航班信息,每屏10条记录,按任意键显示下一屏。读文件(采用fread或fscanf)然后显示即可。

(3)航线查询模块

    通过菜单选择查询方式,提供按照航班号、起点站、终点站和飞行时间查询。采用基本查找算法即可。

十一、职工信息管理系统设计

  1. 需求分析

系统要以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;职工信息采用文件保存,因而要提供文件的输入输出操作;要实现职工信息的浏览功能,则要提供信息显示操作;要实现职工信息查询功能,则要提供查找操作(按学历查询和按职工号查询两种查询方式);要实现职工信息删除、修改功能则要提供文件记录的删除、修改操作。

  1. 总体设计

整个系统被设计为职工信息输入模块、职工信息浏览模块、职工信息查询模块和职工信息删除与修改模块。

  1. 详细设计

数据结构采用结构体,设计职工信息结构体:

Struct employeeInfo

{

  Char jobNo[10];  //职工号

  Char name[20];  //姓名

  Char sex;       //性别

  Int age;        //年龄

  Char eduLevel[10];  //学历

  Float salary;    //工资

  Char addr;     //地址

  Char tel[11];    //电话

}EmpInfo;   //职工信息结构体

(1)职工信息输入模块

采用fwrite或fprintf把职工信息写入航班信息文件。

(2)职工信息浏览模块

分屏显示职工信息,每屏10条记录,按任意键显示下一屏。读文件(采用fread或fscanf)然后显示即可。

(3)职工信息查询模块

通过菜单选择查询方式,提供按学历查询和按职工号查询两种查询方式。采用基本查找算法即可。

  (4)职工信息删除与修改模块

通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。修改操作于删除操作类似,只是判断是否是要修改的记录,如果是,则把修改后的记录写入文件,否则直接写入文件。

十二、图书信息管理系统设计

  1. 需求分析

系统以菜单方式工作,提供键盘式选择菜单以实现功能选择;图书信息采用文件保存,因而要提供文件的输入输出操作;要实现图书信息的浏览功能,则要提供信息显示操作;要实现图书信息查询功能,则要提供查找操作(提供按书名、作者名查询两种查询方式);要实现图书信息删除、修改功能则要提供文件记录的删除、修改操作。

  1. 总体设计

整个系统被设计为图书信息输入模块、图书信息浏览模块、图书信息查询模块和图书信息删除与修改模块。

  1. 详细设计

数据结构采用结构体,设计图书信息结构体:

Struct

{

  Char loginNo[10];    //登录号

  Char name[20];      //书名

  Char author[20];     //作者名

  Char classNo[10];    //分类号

  Char publisher[10];   //出版单位

  Char pubTime[20];   //出版时间

  Float price;         //价格

}bookInfo;   //图书信息结构体

(1)图书信息输入模块

采用fwrite或fprintf把图书信息写入图书信息文件。

(2)图书信息浏览模块

分屏显示图书信息,每屏10条记录,按任意键显示下一屏。读文件(采用fread或fscanf)然后显示即可。

(3)图书信息查询模块

通过菜单选择查询方式,提供按书名查询和按作者名查询两种查询方式。采用基本查找算法即可。

(4)图书信息删除与修改模块

通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。修改操作于删除操作类似,只是判断是否是要修改的记录,如果是,则把修改后的记录写入文件,否则直接写入文件。

十三、图书管理系统设计

  1. 需求分析

图书管理信息采用文件保存,因而要提供文件的输入输出操作;要实现对图书基本信息的查询,则要提供查找操作(提供按书名、作者名查询两种查询方式)和显示操作;要实现对撤销图书信息的删除则要提供文件记录的删除操作;办理借书或还书手续需要提供修改操作;另外还要提供键盘式选择菜单以实现功能选择。

  1. 总体设计

整个系统被设计为数据输入模块、数据查询模块、数据删除模块和数据修改模块。

  1. 详细设计

数据结构采用结构体,设计图书信息结构体:

Struct bookManageInfo

{

  Char bookName[20];     //图书名称

  Char bookCode[20];      //图书编号

  Float price;             //图书价格

  Char author[10];         //作者

  Int state;               //存在状态,0代表可以出借,1代表已经借出

  Char borrowerName[10];  //借书人姓名

  Int sex;                //借书人性别,0代表女,1代表男

  Char stuNo[10];         //借书人学号

}bookMInfo;

(1)数据输入模块

采用fwrite或fprintf把图书基本信息写入图书信息文件。

(2)数据查询模块

通过菜单选择查询方式,提供按书名查询和按作者名查询两种查询方式。采用基本查找算法即可。

       (3)数据删除模块

       通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。

       (4)数据修改模块

       办理借书手续时,先要在文件中查找要借的书的存在状态,若可以出借,则允许借出,把借书人姓名、性别和学号添加到该书的记录中,并把存在状态改为已经借出;否则,显示“抱歉,该书已借出”。办理还书手续时,在文件中查找该书的记录,然后把存在状态改为允许出借,把借书人姓名、性别和学号删除。具体修改操作可以参考删除操作。

十四、实验设备管理系统设计

  1. 需求分析

实验室设备信息用文件存储,故要提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备的查询需要提供查找操作;另外还要提供键盘式选择菜单以实现功能选择。

  1. 总体设计

整个系统被设计为实验设备信息输入模块、实验设备信息添加模块、实验设备信息修改模块、实验设备分类统计模块和实验设备查询模块。

  1. 详细设计

   数据结构采用结构体,设计实验设备信息结构体:

Struct equipmentInfo

{

  Char equipCode[10];  //设备编号

  Char equipType[20];  //设备总类

  Char equipName[20]; //设备名称

  float equipPrice;    //设备价格

  char buyDate[20];   //设备购入日期

  int  scrap;         //是否报废,0表示没有报废,1表示报废

  char scrapDate[20];  //报废日期

}EquInfo;

  1. 实验设备信息输入模块

采用fwrite或fprintf把实验设备基本信息写入实验设备信息文件。

  1. 实验设备信息添加模块

添加设备时,采用fwrite或fprintf把添加的设备基本信息采用追加的方式写入设备信息文件。

  1. 实验设备信息修改模块

   修改设备信息,则需要读文件,判断信息是否是要修改的设备的信息,如果是,修改,重新写入文件;否则直接重新写入文件。

  1. 实验设备分类统计模块

根据给定的分类标准(设备种类、设备名、设备购入日期)对文件的记录进行排序,排序方法可以选择冒泡、插入、选择等方法。然后采用查找算法查找同类设备,采用基本的数学运算即可统计同类设备的相关信息,比如数量、价钱等。

  1. 实验设备查询模块

通过菜单选择查询方式,提供按设备编号、设备种类、设备名称、设备购入日期和设备状态为正常(scrap字段值为0)这些查询方式查询。采用基本查找算法即可。

十五、手机通信录管理系统设计

  1. 需求分析

手机通信录采用文件存储,因而要提供文件的输入输出操作;查看功能要提供显示操作;增加新数据的过程要检查是否有重复,存储空间是否已满,且录入的新数据能按递增的顺序自动进行条目编号,因而要提供查找、统计和排序操作;要提供修改与删除和自动调整编号功能;另外还要提供键盘式选择菜单以实现功能选择。

  1. 总体设计

整个系统可以设计为数据查看模块、数据添加模块、数据修改模块、数据删除模块。

  1. 详细设计

数据结构采用结构体,设计通信录结构体:

Struct communicationMethod

{

  Char name[20];    //姓名

  Char tel[12];      //电话号码

  Int  type;        //分类:0表示办公类,1表示个人类,2表示商务类

  Char email[20];   //电子邮件地址

  Int num;        //条目编号

}ComMtd;

(1)数据查看模块

通过菜单选择查看信息,然后选择办公类、个人类或者商务类,则显示所选类信息列表。这是一个查找与显示的过程,在手机通信录文件中查找type类型符合的记录,输出。

   (2)数据添加模块

     首先,查看信息条数是否超过15,如果超过,则提示“通信录已满!”,返回上级菜单;否则,提示输入一条记录,将对通信录执行查找操作,查找姓名和电话号码字段,如不存在相同的记录,则用fwrite以追加方式写入文件,并给记录的条目字段赋值(在检查有无重复的过程中启动计数),否则提示“数据已经存在,请重新输入或者取消!”。

   (3)数据修改模块

    修改通信录信息,则需要读文件,判断信息是否是要修改的信息,如果是,修改,重新写入文件;否则直接重新写入文件。

   (4)数据删除模块

通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。

十六、简单的行编辑器

问题分析:

采用二维数组处理,设立二维数组edit[M][N]。M行,每行可存N个字符。用getchar()输入,单词之间用空格隔开(空格也会作为字符存入),当捕获回车字符(‘\n’)时则换行即M++。

采用文本形式存储,只需要提供写文件操作即可(fprintf,fwrite的用法)。

查找、替换、修改操作对文件进行。文件的查找、替换和修改操作可以参考前面的介绍。

十七、银行卡管理系统

银行卡信息采用结构体,设立银行卡信息结构体:

Struct creditCard

{

  Char cardNo[20];   //卡号

  Char name[20];    //持卡人姓名

  Char ID[20];      //持卡人身份证号码

  Char password[20]; //密码

  Int  flag;        //标志该卡是否启用(0表示未启用,1表示启用)

  Float account;     //账户金额

  Int integral;       //积分

}CCard;

(1)制卡指申请一个银行卡。即建立一个CCard对象,输入信息对其初始化。

(2)账户信息存储到账户信息文件中,当制作一新卡时,就把该新卡追加到账户信息文件。对账户信息的管理需要实现账户信息查询,用基本的查找算法按卡号对账户信息文件进行查找,并打印输出。

(3)实现卡交易和合法性检查。用户首先依靠卡号和密码登陆(通过查找账户信息文件,来查看卡号和密码是否正确匹配),输入交易金额,如果account>=输入金额,则输出“交易成功!”,并更改account=account-输入金额。否则输出“对不起,您的余额不够!”。

(4)实现卡金融交易积分功能。在把积分初始化为0,只需在卡交易的时候,把交易金额取整加到积分上。

(5)实现卡报表功能。读账户信息文件,分屏输出所有账户的帐号和交易金额。

十八、组数游戏

问题分析

(1)输入正整数的个数n,输出n个数连接成的最大的多位数。找出n个数中最大数字的位数,然后将所有的数字通过后面补零的方式扩展成为最大位数。把变换后的n位数从大到小排序,然后把添加上的零去掉,按顺序输出的序列即为所求的最大数字。

(2)数据结构采用结构体,由于正整数的位数不确定,可能非常大,所以数据类型采用字符数组。

Struct

{

  char data[20];     //数据

  char ext_data[20];  //扩展数据

}Elem[N];    //结构体数组

N可以在宏定义中定义:#define N 20

(3)算法流程

输入正整数个数n;

Max=0;   //Max存储最大位数

//输入正整数并计算最大位数

For (i=0;i<n;++i)

{

  输入Elem[i].data;

  Strcpy(Elem[i].ext_data,Elem[i].data);

  Tmp=strlen(Elem[i].data);   //计算输入数字的位数

  If(Tmp>Max)

     Max=Tmp;

}

//计算扩展数字

For (i=0;i<n;++i)

{

  tmp=strlen(Elem[i].data);   //计算输入数字的位数

  m=Max-tmp;    //m为需要补0的个数

  定义一个m个’0’的字符串tmp_str;

  Strcat(Elem[i].ext_data,tmp_str);

}

   //排序

任选一中排序算法(冒泡、插入、选择等)对数字结构体数组按照ext_data从大到小排序。

   //输出

   按序输出结构体数组中data数据。

十九、仪器仪表管理

1、需求分析

仪器仪表信息用文件存储,故要提供文件的输入输出操作;要能够完成对仪器仪表信息的修改和删除,需要对提供仪器仪表信息修改和删除操作;实现对仪器仪表信息的查询和统计及显示操作;另外还要提供键盘式选择菜单以实现功能选择。

2、总体设计

   整个仪器仪表管理系统分为仪器表信息输入模块、仪器表信息修改和删除模块、仪器表信息查询和统计模块。

3、详细设计

  数据结构采用结构体:

  Struct instrumentInfo

  {

Char instrName[20];   //仪器仪表名

Char instrNo[10];     //仪器仪表编号

Char buyDate[20];    //购买时间

Char borrowDate[20]; //借入时间

Char lendDate[20];   //借出时间

Char returnDate[20];  //归还时间

Char repairDate[20];  //维修时间

Int state;            //状态信息(0代表可借出,1代表已借出,2代表正在维修)

  }InstrInfo;

(1)输入模块

采用fwrite或fprintf把仪器仪表信息写入仪器仪表信息文件。

(2)修改和删除模块

通过菜单选择借出操作,查找文件仪器仪表信息,找到相应的仪器仪表,如果仪器仪表状态为0,则允许借出,在文件中更改仪器仪表状态为1,更改借出时间;否则,即仪器仪表借出或正在维修,则输出“抱歉,仪器仪表已借出(正在维修)!”这个过程是一个对文件查找(读文件、判断是否是要查找的纪录)、重新写入的过程。

删除操作只需读文件,判断所读纪录是不是要删除的记录,如果是,则舍弃;否则重新写入文件。

(3)查询和统计模块

    通过菜单选择查询或统计操作,若选择查询,则需要再选择查询方式:基本信息、时间段、时间点。基本信息查询,就分屏(每屏10条信息)显示所有记录,这是一个读文件和输出的过程。时间段查询,则要输入起止时间和表征字段(可以用0表示购买起止时间,1表示借出起止时间,2表示维修起止时间)。例如输入2004 1 1  2004 10 10  0

表示查询2004年1月1日到2004年10月10日之间购买的仪器仪表信息。则读一条记录,判断购买时间是否处于起止时间之间,如果处于,则打印输出,否则舍弃。借出和维修查询与此类似。

统计功能和查询功能类似,只需要加一个计数变量即可。

二十、服装销售系统

1、需求分析

   用户与商品信息要采用文件存储,因而要提供文件的输入输出操作;实现用户的添加、修改、删除,商品信息的添加、修改、删除、查找等需要提供信息的添加、删除、修改与查找操作;实现商品浏览功能的实现需要实现显示操作;另外还要提供键盘式选择菜单以实现功能选择。

2、总体设计

   整个服装销售系统被设计为管理员模块、店长模块、销售员模块、商品模块等,如下图所示:另外还要实现各用户自身信息的管理。

   

3、详细设计

   数据结构采用结构体,构造结构体如下:

Struct goods        //商品

{

Char name[10];    //商品名

Char code[10];     //商品代码

Char producer[10];  //制造商

Float price;        //价格

}Goods;

Struct administrator     //管理员

{

   Char ID[10];      

   Char password[10];

   …                //其他信息

   

}Admin;

Struct shopkeeper     //店长

{

   Char ID[10];

   Char password[10];

      …                    //其他信息

}Shkpr;

Struct seller     //销售员

{

Char ID[10];     //营业ID号

Char name[10];   //姓名

Char ID[10];     //所属店长ID号

Goods *good;    //指向该销售员销售的商品信息

…             //其他信息

}Seller;

Struct goods_report   //商品报表

{

Goods good;     //商品

Seller assistant;   //营业员

Char sell_data[20]; //出售日期

}

    先建立文本文件Admin.txt,其中存放管理员的ID和密码及其它信息;文本文件Shopkeeper.txt,其中存放店主的用户名和密码及其它信息;文本文件Seller.txt,其中存放销售员的ID和密码及其他信息。

登录系统时,通过菜单选择登录身份,然后提示输入用户ID和密码。

如果以管理员身份登录,则在Admin.txt文件中查找(采用基本的查找算法)输入的用户ID和密码是否存在,如果存在,则允许进入,显示选择菜单:修改密码  添加用户  用户信息  商品信息;否则,显示“输入的用户名或密码错误!”,返回上级菜单。

店长与销售员登录系统与此类似,店长登录成功后显示选择菜单为:修改密码  修改个人信息  商品信息   查看报表  商品储备信息。销售员登录成功后显示选择菜单为:商品浏览  查找商品  出售商品  本日报表   本月报表

密码修改与个人信息修改既是写入新的密码、个人信息,覆盖掉原来的,就是文件的读写操作。在登录成功后,就标志出登录人员的纪录位置,这样修改信息时,可以直接定位到修改记录的位置。

管理员添加用户,就是执行文件写操作,采用追加的方式把用户信息写入用户信息文件(根据添加的用户身份选择写入Shopkeeper.txt还是Seller.txt)。删除用户操作,读取用户信息文件,如果读出的用户不是要删除的用户,则直接重新写入文件,否则,舍弃。

管理员选择用户信息,将进入用户信息修改和用户信息统计的选择。用户信息修改操作,即查找要修改的用户信息文件,找到要修改的用户,写入修改后的信息覆盖掉原始信息。用户信息统计操作,读用户信息文件,比较统计信息字段,符合统计要求则计数加1,最后输出符合条件的记录数(也可以把符合条件的记录信息完全输出)。

管理员选择商品信息,则可以选择商品信息添加、修改、删除、查找、统计,商品信息的添加、修改、删除、统计操作与用户信息的相应操作类似。查找操作只需采用基本的查找算法查找商品信息文件即可。

店长修改密码和修改个人信息操作与管理员相应操作类似。

店长的商品信息可以选择商品信息修改和商品信息统计,此类操作与管理员的相应操作相同。

店长选择查看报表,则显示选择菜单:日报表  月报表  商品销售量报表  营业员业绩报表。查看日报表,根据输入的日期在商品报表文件中查找,把出售日期与输入日期符合的记录输出。查看月报表操作类似,查找商品报表文件中商品出售日期在输入月份之间的记录输出。商品销售量报表,这是一个统计的过程,查找商品报表,统计同一商品的销售量(月销售量、年销售量)。查看营业员业绩报表,则读销售员信息文件,把信息打印输出即可。

店长查找浏览修改商品储备信息,查找与修改操作可以参考管理员对商品的查找与修改操作,浏览操作就是把商品储备信息分屏输出,每屏10条记录,按任意键继续。这些操作在该店长对应的商品储备信息文件中执行。

[注:每个店长对应一个商品储备信息文件,里面存放该店储备的商品信息。

文件格式:

店长ID  

商品名  商品代号  制造商  价格…]

销售员可以选择商品浏览、查找、出售商品、察看自己本日报表、本月报表。商品浏览、查找以及查看自己本日报表、本月报表可以参考前面相关操作。出售商品操作执行的动作是:在本店的商品储备文件中查找要出售的商品,如果存在,则出售,在商品报表文件和销售员销售文件中添加该商品信息,并把该商品信息从商品储备文件中删除。

二十一、歌星大奖赛

1、问题分析

    对于要求(1),输入10个评委的打分,假设分数存放在数组score[10]中,然后对分数由高到低排序(冒泡、插入、选择法),选手最后得分为(score[1]+score[2]+…+score[8])/8。

对于要求(2),最不公平的评委比较容易找到,就是把最高分score[0]和最低分score[9]分别与(1)得到的平均分比较,差值较大的那个就是最不公平的评委。找最公平的评委,可以先把中间元素score[5]与平均分比较,计算差值,然后往前推,计算score[4]、score[3],如果差值比上一次计算所得值大,则停止;再往后推,计算score[6]与平均值的差值,并与前面得到的最小差值比较,如果大于最小差值,则得到最小差值的评分对应的评委就是最公平的评委;如果小于最小差值,则把最小差值改为score[6],并继续比较score[7],直到所得差值比上一次计算所得值大。

(2)具体实现

     数据结构采用结构体:

     Struct judge

     {

        Float score;        //评委打分

        Int  judgeNo;  //评委号码

     }Judge[10];    //评委结构体数组

    核心程序:一次循环处理一个歌手。

While(还有歌手)

{

   //输入10个评委的打分

   For(i=0;i<10;++i)

{   

     Scanf(“%f”,&Judge[i].score);

     Judge[i].judgeNo=i;

 }

  //输出最后得分

evenScore=0;

For(i=1;i<9;++i)

     evenScore+=Judge[i].score;

evenScore/=8;

//评选最公平与最不公平评委

}

二十二、杂志订阅管理软件

1、需求分析

   订户的信息要用文件存储,所以要提供文件的输入输出操作;要实现增加新订户的功能,所以要提供文件的添加操作;要实现对订户文件的查询,所以要提供文件的查找操作;要删除已到期的订户记录,所以要提供文件的删除操作;要统计本期杂志订户数并打印运算结果,所以要提供统计和显示操作;另外还要提供键盘式选择菜单以实现功能选择。

2、总体设计

   该管理软件被设计为数据添加模块、数据删除模块和数据统计模块。

3、详细设计

  数据结构选择结构体:

  Struct subscriberInfo

 {

   Char name[20]; //姓名

Int sex;         //性别

Char addr[20];   //地址

Char tel[12];    //电话号码

Float price;     //杂志单价

Int num;       //订阅数

Char date[10];   //订阅的期限

 }subInfo;                 //订户信息结构体

(1)数据添加模块

 用追加的方式采用fwrite或fprintf把新增订户信息写入订户信息文件。

(2)数据删除模块

采用基本的查找算法,查找订户信息文件,比较当天日期和订阅期限,如果到期,则删除该订户记录。删除方法:如果判断该条订户信息要删除,则不再把该条信息写入文件,继续读下一条订户信息。

(3)数据统计模块

对本期杂志订户数的统计,就是读文件,输出订户名、订阅数、单价,并计算金额(单价*订阅数)。(fread或fscanf读文件,printf输出结果)可以定义变量统计订户数、订阅数和总金额,最后输出。

二十三、人事管理

1、需求分析

   人事档案信息采用文件存储,因而要提供文件的输入输出操作;根据学院人事的变动情况,添加删除记录,因而要提供文件的添加删除操作;根据编号和姓名进项查询,所以要提供文件的查找操作;高级编辑功能,就是提供文件的修改操作;统计功能要提供统计操作;排序功能要提供用排序算法对文件记录的排序;另外还要提供键盘式选择菜单以实现功能选择。

2、总体设计

   整体设计为数据输入模块、数据添加模块、数据删除模块、数据查询模块、数据修改模块、数据统计模块、数据排序模块。

3、详细设计

  数据结构采用结构体:

Struct personnelArchiveInfo

{

  Char No[10];       //编号

  Char name[10];     //姓名

  Int sex;           //性别

  Int age;           //年龄

  Char job[10];      //职务

  Char post[10];     //职称

  Char politic[10];    //政治面貌

  Char edu_level[10];  //最高学历

  Char period[10];    //任职时间

  Char start_time[10];  //来院时间

  Char type[10];       //人员类别

}PAInfo;

  1. 数据输入模块

   采用fwrite或fprintf把员工信息写入人事档案文件。

  1. 数据添加模块

   用追加的方式采用fwrite或fprintf把新增员工信息写入人事档案文件。

  1. 数据删除模块

根据人员编号查找要删除的人员,从文件中读一条记录,查看编号是否要删除,如果是,则舍弃,不再写入文件;否则重新写入文件。

  1. 数据查询模块

     把编号和姓名作为查询字段,用基本查找算法查找人事档案文件,把符合查找要求的记录输出。

  1. 数据修改模块

    查找要修改的记录,修改之。先用fread或fscanf读记录,若是要修改的记录,则修改信息,把修改后的信息写入文件;否则直接写入文件。

  1. 数据排序模块

    通过菜单选择年龄或者来院时间,把数据从文件中读出来,任意选择一种排序算法对记录进行排序,输出排序结果。

  1. 数据统计模块

通过菜单选择统计字段:在职人数、党员人数、女工人数、高学历人数、高职称人数。

例如选择党员人数,则统计运算伪码如下:

Count=0;    //记录在职人数

While(文件未读完)

{

   读一条记录;

   If(政治面貌是党员)

   {

      Count++;

    输出该条记录;

}

其他字段的统计运算与次类似。

二十四、方格网上观测数据的窗口滑动平均处理

1、问题分析:

M行N列方格网数据事先存放在文件中,在处理过程中,可以采用二位数组存储,然后根据9点圆滑或者25点圆滑对观测数据进行滑动窗口平均处理,计算结果写入结果文件。

2、实现过程:

建立原始数据文件data.txt,其中第一行写明行数M和列数N。然后从第二行开始存放方格网数据,数据顺序按行存放。建立结果文件result9.txt和result25.txt,分别存放9点和25点滑动平均处理结果。算法流程如下:

读data.txt,得到M和N的值;

new init_data[M][N];    //开辟一个数组

读data.txt中的方格网数据到init_data数组中;

提示用户选择9点还是25点;

If(选择9点)

{

  对观测点数据进行9点滑动平均处理,把处理结果存入result9.txt;

}

If(选择25点)

{

  对观测点数据进行25点滑动平均处理,把处理结果存入result25.txt;

}

这里简单介绍下观测数据的9点滑动平均处理,25点于此类似。

如下图:

a[i-1][j-1]

a[i-1][j]

a[i-1][j+1]

a[i][j-1]

a[i][j]

a[i][j+1]

a[i+1][j-1]

a[i+1][j]

a[i+1][j+1]

对于a[i][j],其将成为9点窗口的中心,因而a[i][j]= (a[i-1][j-1]+ a[i-1][j]+ a[i-1][j+1]+ a[i][j-1]+ a[i][j]+ a[i][j+1]+ a[i+1][j-1]+ a[i+1][j]+ a[i+1][j+1])/9

对于窗口跨越观测区域内外的边缘点,只取其中落在观测区域内的数据参加平均值计算。假设a[i][j-1]为边缘点,即左侧没有数据,则a[i][j-1]=(a[i-1][j-1]+a[i-1][j]+a[i][j-1]+a[i][j]+a[i+1][j-1]+a[i+1][j])/6。

二十五、机房机位预约模拟

1、数据结构

顾客信息结构体:

Struct CusInfo

{

   Char name[20];//顾客姓名

   Int sex;      //性别

   Char tel[11];  //电话

}CInfo;

机位信息结构体:

Struct

{

   Int  State[6];     //机位状态,每2个小时为一个时间段,08:00-20:00共6个时间段。0表示有空机位,1表示没有空机位

   CInfo waitlist[6];  //各个时间段的运行客户

   Int  year;

   Int  month;

   Int  day;       //日期

}PCInfo;

PCInfo  info[100];   //存放100天的机位信息

2、具体实现

(1)查询

    输入时间,则遍历info数组,查看日期(year/month/day),如果日期匹配,则把机位信息输出。

(2)机位预订

输入日期(或时间段)查询机位信息文件,如果日期符合,再查看状态字段,若相应字段为0,则预约(即把该用户信息加入写入机位waitlist相应时间段中);若相应字段为1,则查看本天其他时间段,寻找最近空时间段。如果用户要求在非空时间上机,则查找info数组中该时间段为空的元素,把该时间段的状态字段设为1,把用户信息加入机位当天waitlist相应时间段中。

(3)退出预订

     根据预订日期和客户信息找到预订信息,把客户信息删除,并把该时间段的状态置为0。

(4)查询

输入日期和时间段,查看该时间段的状态,如为1,则把相应时间段的运行客户信息打印输出。如为0,则显示“该时间段空闲!”。

二十六、停车场管理1

1、问题分析

根据题目要求,停车场可以用一个长度为n的堆栈来模拟。由于停车场内如有某辆车要开走,在它之后近来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。所以可以设两个堆栈。

2、实现过程

    #define n 30

设立两个长度为n的堆栈park[n],temp[n]。汽车信息采用结构体存储,设立汽车信息结构体:

Struct carInfo

{

   Char action;   //到达(‘A’)还是离去(‘D’),或者结束标志‘E’。

   Int  carNo;    //汽车牌照号码

   Int  schedule; //到达/离去的时刻

   Int  flag;     //标志汽车是否进入了停车场(0表示在停车场,1表示在便道上)

}CInfo;

3、主体算法流程

While(输入信息!=(’E’,0,0))

{

  If(action==’A’)

  {

     If(park堆栈未满)

{

    把flag标志置为0;

该汽车信息进堆栈;

        输出“停在停车场!”;

}

Else

{

   把flag标志置为1;

   输出“停在便道上!”;

}

   }

 If(action==’D’)

{

  If(flag==1)  //停在便道上

    输出“该车在便道上,不用交费,直接开走!”;

  Else

  {

    While(park堆栈栈顶元素出堆栈(执行pop操作))

{

if(栈顶元素的carNo==输入的carNo)

{

输出”该车在停车场的停留时间**,应交费¥¥”;(停留时间=离去时刻-到达时刻,交费金额=单价*停留时间,单价自己设定)

temp堆栈中的元素依次出堆栈(pop),同时进park堆栈(push)。

Break;

 }

Else

  栈顶元素进temp堆栈(push);

      }

}

}

二十七、停车场管理2

1、需求分析

   车辆信息要用文件存储,因而要提供文件的输入输出操作;当车离开时,要删除文件中该车的信息,因而要提供文件的删除操作;另外还要提供现实操作和用键盘式菜单实现功能选择。

2、总体设计

   整个管理系统可以设计为停车模块、取车模块、车辆信息浏览模块。

3、详细设计

 停车场用二位数组实现park[2][6];   //2层,每层有6个车位

   每辆车的信息用结构体来实现,设立车信息结构体:

   Struct carInfo

   {

      Int carNo;     //车牌号

      Int layerNo;   //层号

      Int parkNo;   //车位号

      Int time;     //停车时间

   }CInfo;

   

(1)停车模块

    对车辆信息赋值,分配前检查车位使用情况(按行查找park数组,元素为0表示车位为空,则允许分配)。把新添加的车辆信息以追加的方式用fwrite写入汽车信息文件,并更改汽车信息文件中其他汽车信息的停车时间(停车时间加5)。

(2)取车模块

计算费用(停车费用=停车时间*0.2元),从文件中删除该车信息。并将该车位对应的二位数组变量设为0,表示该车位可用。输出提示信息:是否输出停车费用总计?(Y/N)如果选择Y,则输出停车费用,否则回到上级菜单。

(3)车辆信息浏览模块

输出车辆信息文件中的记录。

另外,用户按Esc键退出系统。

二十八、建筑工地信息管理

1、需求分析

信息采用文件存储,因而要提供文件的输入输出操作;要插入数据,因而要提供数据的添加操作;要实现数据的删除、更新和查询,因而要提供文件记录的删除、修改和查找操作;另外要提供键盘式选择菜单以实现功能选择。

2、总体设计

   整个系统可以被设计为数据输入模块、数据添加模块、数据删除模块、数据更新模块和数据查询模块。

3、详细设计

   数据结构采用结构体,建立四个结构体:

 //销售商-配件-建筑工地结构体

  Struct SellerFitBuild

{

   Char seller_code[10];  //销售商号码

   Char fit_code[10];    //配件号

   Char build_code[10];  //工地号

   Int   num;          //销售数量

}SFB;          //seller_code号销售商销售num个fit_code号配件给build_code工地

//建筑工地

Struct BuildingSite

{

   Char build_code[10];  //工地号

   Char build_name[10];      //工地名

   Char city[10];       //城市

}BS;

//配件

Struct Fitting

{

   Char fit_code[10];    //配件号

   Char fit_name[10];    //配件名

   Char color[10];       //配件颜色

   Float weight;        //配件重量

   Char city[10];       //配件产地

}Fit;

//销售商

Struct Seller

{

   Char seller_code[10];  //销售商号码

   Char seller_name[10];  //销售商名字

   Char city[10];        //销售商城市

}Seller;

(1)主函数建立四个文件,输出提示用户操作的信息,选择操作文件:R[销售商-配件-建筑工地],B[建筑工地],F[配件],S[销售商],空格键[查询]。

(2)数据输入模块

用fprintf或者fwrite写数据到相应文件中。

(3)数据插入模块

采用追加的方式写数据到文件。

(4)数据删除模块

通过菜单选择相应的文件后,用fopen打开该文件,从文件中读一条记录,判断是否要删除,如果是,则舍弃;否则重新写入文件,读下一条记录。

(5)数据更新模块

   与数据删除模块类似,只是判断所读的纪录是否要更新,如果是,则把更新后的纪录写入文件,否则直接写入文件。

(6)按空格键进入查询操作

   通过菜单选择查询零件-供应商或者项目-供应商。例如选择查询零件-供应商。其基本流程如下:

   打开销售商-配件-建筑工地文件;

   While(文件未结束)

  {

     读一条记录,得到销售商号码和配件号;

     在销售商文件中查找该销售商号码,得到该销售商所在城市;

     在配件文件中查找配件号,得到该配件的产地;

     如果销售商所在城市与配件的产地相同,则输出销售商号码和配件号码;

  }

查询项目-供应商记录对的操作类似,只需把配件号改为工地号即可。

二十九、电影俱乐部

  1. 需求分析

DVD信息和俱乐部会员信息用文件存储,因而要提供文件的输入输出操作;要注册新会员,因而要提供文件的添加操作;实现按月缴纳费用,因而要提供文件的修改操作;要浏览信息因而要提供显示操作;要实现查询则要提供文件的查找操作;另外要提供键盘式选择菜单以实现功能选择。

  1. 总体设计

整体设计为会员注册模块、会员交费模块、会员租用DVD模块、会员归还DVD模块、信息浏览模块和信息查询模块。

  1. 详细设计

采用文件管理信息,建立两个文件:DVD信息文件和会员信息文件。

数据结构采用结构体:

//DVD信息结构体

Struct DVDInfo

{

   Char No[10];    //DVD编号

   Char name[10]; //DVD名字

   Int  state;      //DVD状态:0表示已借出,1表示可出借

}DI;

//会员信息结构体

Struct MemberInfo

{

   Char No[10];   //会员编号

   Char name[10]; //会员姓名

Char password[20]; //会员密码

   Float balance;  //账户余额

   DI  borrowDVD[3];  //所借DVD信息;

   Int  state;   //表示租用DVD的数目,取值为0-3

}MI;

分析:

建立DVD文件和会员信息文件,输出菜单:新用户注册[N]  直接登录[Enter]。如果是新用户注册,则进入用户注册模块。如果直接登录,则提示输入用户名和密码。普通会员正确登录后显示:租用DVD[H]  归还DVD[R]  缴纳费用[P]  账户信息[D]。按相应的提示键将进入相应的模块。管理员登录则显示:DVD信息[D]    会员信息[M]    交易信息[T]。DVD信息查看就是分屏输出DVD文件中的记录,会员信息就是分屏输出会员信息文件中的记录,交易信息则输出租用DVD数不为0的会员信息。

(1)会员注册模块

提示输入用户信息:会员编号(昵称),会员姓名,密码。将把新的会员信息添加到会员信息文件中,并把账户余额初始化为0,所借DVD信息初始化为空。然后系统显示提示信息:缴纳费用?[Y/N]。按Y键将进入会员交费模块,N则返回系统初始界面。

(2)会员交费模块

    提示输入交费金额,则在会员信息文件中修改其账户余额。

(3)会员租用DVD模块

可以通过菜单选择浏览DVD信息或者租用。浏览DVD信息调用信息浏览模块,租用则首先查看自己的余额,如果>0,则查看状态,如果state<3,则允许出借,提示输入租用的DVD编号,在会员信息文件中加入该DVD信息,state++。并在DVD信息文件中把该DVD状态改为已借出。

(4)会员归还DVD模块

   提示用户输入要归还的DVD编号,把该用户记录的该DVD信息初始化为空,state--。同时在DVD信息文件中把其状态改为可供出借。

(5)信息浏览模块

   浏览DVD信息,则采用fread或fscanf从DVD信息文件中读记录,分屏输出。浏览会员信息文件,则读会员信息文件,输出。

(6)信息查询模块

   会员对自己账户状况的查询,则输出其账户信息即可(登录时在会员信息文件中找到自身信息,事先读到临时变量中)。

管理员对所有交易情况的查看,则查找用户信息文件,如果用户的staet!=0,则输出用户信息。

三十、歌曲信息管理

1、需求分析

用文件存储信息,因而要提供文件的输入输出操作;可对歌曲信息进行输入、删除、浏览,因而要提供文件的输入、删除和信息显示操作;查询歌曲信息要提供查找操作;实现按作者分组显示功能则要提供排序功能;另外要提供键盘式选择菜单以实现功能选择。

2、总体设计

   整个管理系统可以被设计为数据输入模块、数据删除模块、信息浏览模块、信息查询模块和信息分组显示模块。

3、详细设计

   数据结构采用结构体,建立歌曲信息结构体:

Struct SongInfo

{

  Char name[20];   //歌曲名

  Char author[20];  //作者

  Char singer[20];  //演唱者

  Char pub_date[6]; //发行年月(yyyymm)

}SI;

  1. 数据输入模块

用fprintf或fwrite把歌曲信息写入文件。

  1. 数据删除模块

采用基本的查找算法,查找歌曲信息文件,如果是要删除的歌曲,则舍弃改信息。否则重新写入文件。

  1. 信息浏览模块

用fscanf或fread读歌曲信息文件,分屏显示输出,每屏10条信息。

  1. 信息查询模块

通过菜单选择查询字段:歌曲名  作者  演唱者。 然后采用基本查找算法在歌曲信息文件中查找,如果找到,则输出;否则输出“对不起,没有您要找的歌曲信息!”。

  1. 信息分组显示模块

选择按作者分组显示歌曲信息,用fread或fscanf把歌曲信息文件中的信息读取到临时变量中(临时变量数据结构可以采用歌曲信息结构体数组),采用排序算法(冒泡、插入、选择等)把歌曲信息按照作者排序,然后分屏输出,每屏10条记录。

三十一、交通处罚单管理

  1. 需求分析

交通处罚单信息用文件存储,因而要提供文件的输入输出操作;要求可以输入、删除、浏览交通处罚单信息,因而要提供信息的输入、删除和显示操作;要实现按车辆、驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。

  1. 总体设计

整个管理系统被设计为信息输入模块、信息删除模块、信息浏览模块、信息查询模块和信息统计模块。

  1. 详细设计

数据结构采用结构体,设计交通处罚单结构体:

  Struct TranficPunishBill

 {

Char carNo[10];    //车牌号

Char driverNo[20];  //驾照号

Char policeNo[10];  //开单交警号码

Char billNo[20];   //处罚单号码

Char time[12];  //处罚时间(yyyymmddhhmm,年月日时分)

}TPB;

(1)主函数提示用户选择功能:输入  删除  浏览   查询  统计

(2)信息输入模块

     采用追加的方式用fwrite或fprintf把处罚单信息写入处罚单信息文件。

(3)信息删除模块

 输入处罚单号码,然后在处罚单信息文件中查找该条处罚单,删除之。具体删除操作:用fopen打开该文件,从文件中读一条记录,判断是否要删除,如果是,则舍弃;否则重新写入文件,读下一条记录。

(4)信息浏览模块

    采用fread或fscanf读处罚单信息文件,分屏输出,每屏10条记录。

(5)信息查询模块

    通过菜单选择查询字段:车辆   驾驶员    开单交警, 分别按照车牌号、驾照号、开单交警号采用基本的查找算法查找交通处罚单信息文件,如果找到相应得记录则输出处罚单信息,否则输出“您所查找的信息不存在!”。

(6)信息统计模块

提示输入驾驶员的驾照号和时间段。设置一个计数器,初始化为0。采用基本算法查找交通处罚单信息文件,比较驾照号,如果驾照号匹配,再看处罚单时间是否出于查询时间段内,如果是,则计数器加1,并输出该处罚单号。文件查找结束后,输出计数器的值。

三十二、学生证的管理程序

  1. 需求分析

学生证信息采用文件存储,因而要提供文件的输入输出操作;给定学号或班号,做相应得操作,要提供查找操作;显示信息要提供显示操作;修改和删除信息要提供文件的修改和删除操作;提供一些统计各类信息的功能要实现统计操作;另外提供键盘式选择菜单以实现功能选择。

  1. 总体设计

整个管理程序被设计为数据输入模块、数据查找模块、数据修改模块、数据删除模块和数据统计模块。

  1. 详细设计

数据结构采用结构体,设计学生证信息结构体:

Struct studentCard

{

  Char name[10];

  Int  sex;      //0表示男,1表示女

  Char stuNo[10];  //学号

  Int  classNo;    //班号

……            //其他信息

}StuCard;

(1)主函数

主函数中,显示功能菜单:信息输入(1)  信息查找(2)  信息修改(3)  信息删除(4)  信息统计(5)  

按相应的数字键则进入相应的计算模块。

(2)数据输入模块

输入学生的学生证信息,把该信息以追加的方式写入学生证信息管理文件。

(3)数据查找模块

进入该模块,首先显示提示菜单:按学号查找(1)         按班级查找(2)

按学号查找,则提示输入学号,然后采用基本查找算法(顺序查找)在学生证信息文件中查找学号字段,当找到该记录时,则输出该学生信息,停止继续查找。

按班级查找,则提示输入班级班号,然后采用基本查找算法(顺序查找)在学生证信息文件中查找班号字段,如果班号匹配,则输出该学生信息,直到文件结束。

(4)数据修改模块

    在主菜单中选择(3),则进入数据修改模块。屏幕上提示输入要修改的学生学号。输入学号后,则采用基本查找算法找到该学生信息,修改之。

(5)数据删除模块

与数据修改模块相似,只是找到相应的学生信息后删除,即不再写入文件。

(6)数据统计模块

提供对班级学生数、女生人数、男生人数的统计。通过菜单选择统计字段。建立一个计数器,初始化为0。例如统计班级学生数,则提示输入班号,然后查找学生证信息文件,比较班号,如果匹配,则计数器加1,当文件结束后,输出计数器的值。女生人数和男生人数的统计与此类似。

三十三、学生成绩管理程序

  1. 需求分析

学生纪录用文件存储,因而要提供文件的输入输出操作;要实现插入一个新的学生纪录,因而要提供文件的插入操作;要实现学生纪录得修改和删除,以及登记成绩和修改成绩,因而要提供文件纪录的修改和删除操作;要浏览全班成绩,故要提供显示操作;计算学生总成绩需要提供简单的统计操作;要按学号排序输出全班成绩表,因而要提供排序操作;另外要提供键盘式选择菜单以实现功能选择。

  1. 总体设计

整个成绩管理系统设计为数据插入模块、数据修改模块、数据删除模块、成绩登记模块、成绩修改模块、数据浏览模块、成绩统计模块、成绩表查看模块。

  1. 详细设计

数据结构采用结构体,设计学生纪录结构体:

Struct studentRecord

{

   Char stuNo[10];  //学号

   Char name[20];  //姓名

   Int  age;       //年龄

   Float math;     //数学

   Float English;  //英语

   Float physics;  //物理

}SR;

(1)主函数输出提示菜单:插入学生纪录   修改学生纪录   删除学生纪录  登记成绩

修改成绩  浏览学生纪录   查看总成绩     查看成绩表

(2)数据插入模块

     采用追加的方式用fwrite或fprintf把学生成绩信息写入学生成绩信息文件。

(3)数据修改模块

通过菜单选择修改学生纪录,用fopen打开该文件,从文件中读一条记录,判断是否要修改,如果是,则修改后重新写入文件;否则直接重新写入文件,读下一条记录。

(4)数据删除模块

通过菜单选择删除学生纪录,用fopen打开该文件,从文件中读一条记录,判断是否要删除,如果是,则舍弃;否则重新写入文件,读下一条记录。

(5)成绩登记模块

     类似数据修改模块,只是修改字段为各个科目的成绩。

(6)成绩修改模块

     参考数据修改模块。

(7)数据浏览模块

     用fscanf或fread读取学生成绩信息文件,分屏输出,每屏10条纪录。

(8)成绩统计模块

     用fscanf或fread从学生成绩信息文件中读取一个学生纪录,计算该学生的总成绩(简单的成绩相加),输出,然后读取下一条纪录。

(9)成绩表查看模块

建立结构体数组

Struct

{

   SR record;     //学生纪录

   Float total;  //总成绩

}stu[N];

从学生成绩信息文件中读取各个纪录,total中存放计算得到的总成绩。然后采用排序算法(冒泡、插入、选择等)对数组按照总成绩进行排序。最后顺序输出。

三十四、客房管理系统

1、需求分析

   实现用户登记功能,要提供结构体的输入操作;实现统计功能,要提供相应的统计操作;实现查询功能,要提供查找操作;实现修改功能,要提供修改操作;另外还要提供键盘式菜单实现功能选择。

2、总体分析

   整个客房管理系统被设计为用户登记模块、统计模块、查询模块和修改模块。

3、详细分析

   数据结构采用结构体,设计如下结构体:

//客户结构体

struct   Client{  
            char   Name[20];   //姓名
            int   Sex;        //性别,0表示男,1表示女
            int   Age;       //年龄
            char   ID_card[20];  //居民身份证;  
            int   year;  
            int   month;  
            int   date;       //住店时间  
  };  

//客房结构体
  struct   Hotel{  
        int   Room_ID;  //房间号  
          int   Tel;      //电话
        int   Price;    //价格
          bool   Sign;  //标记房间是否为空房间;  
          struct   Client   Client_list;  //实现两个结构体的嵌套  
  }Room[NUM];  

  1. 用户登记模块

     提示用户输入自身信息以及客房信息,把数据存入Room数组中。

  1. 统计模块

     设置计数器,顺序遍历Room数组来实现。实现对房客数、某一天的房客数的统计。

  1. 查询模块

     通过基本查找算法查找Room数组。可以按房间号、价格、房间标记、用户姓名、居民身份证查询。

  1. 修改模块

     采用基本查找算法在数组中找到要修改的数据,直接更改。

三十五、物资管理系统

根据要求,整个管理系统被设计为信息输入模块、信息查找模块、信息插入模块、领料模块和打印功能模块。

数据结构采用结构体,在题目要求中已给出,这里采用了链表,读者可以尝试把文件中的数据读入链表中,然后查找操作就是对链表的遍历。也可以把struct product*next; {结点指针} 以及struct l_pro * next; {结点指针}从结构体中去掉,采用结构体数组来做。

模块的分析如下:

(1)信息输入模块

     用fscanf或fwrite把物资信息录入pro.dat文件中。

(2)信息查找模块

     用键盘菜单提示查找字段:产品名称    进货日期   产品名称和库存量

     按照产品名称查询,采用基本的查找算法查找物资库存文件记录的p_name字段,如果匹配则输出。 按照进货日期查询,则查找in_date字段。提示输入查找日期,检查日期是否匹配,如果日期匹配,则输出。 按照产品名称和库存量查询,则提示输入产品名称和最小库存量,那么首先查找p_name字段,如果p_name字段匹配,再看real_s字段,如果<输入的最小库存,则输出其信息。

    在查找过程中,如果没有找到相应的记录,则输出“not found!”。    

(3)信息插入模块

    信息插入模块所做的就是文件记录的添加操作,采用fprintf或fwrite用追加的方式写入物资信息文件。

(4)领料模块

    首先提示用户输入所要领的物资的名称或编号以及所领数量,然后查找物资库存信息文件,如果该物资存在且实际库存量满足,则允许领料,在领料文件中添加领料记录,并在物资库存文件中修改实际库存量。

(5)打印功能模块

  通过键盘菜单选择打印领料单或者物资库存清单,显示结果分屏输出,每屏10条记录。主要是文件的读操作(fscanf,fread)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/283766.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

管道进行进程间通信(上)

管道进行进程间通信 在posix和system V标准还没有出现的时候&#xff0c;进程间是如何进行通信的呢&#xff1f;这就要借助于我们今天学习的这个东西了。在进程间通信的标准没有出现之前&#xff0c;在os中就已经存在了文件了。而管道就是基于文件的一种进行进程间通信的方式。…

Redis 数据结构和常用命令

* 代表多个&#xff0c;&#xff1f;代表一个 &#xff08;不用全部敲出来&#xff0c;按住tab可以自动补全&#xff09; -2是无效&#xff0c;-1是永久有效 &#xff1b;贴心小提示&#xff1a;内存非常宝贵&#xff0c;对于一些数据&#xff0c;我们应当给他一些过期时间&a…

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…

NNote插件:让网络阅读变得更高效,轻松同步至Notion笔记

NNote笔记 在这个互联网时代&#xff0c;我们每天都在浏览器中阅读大量的文章和资讯&#xff0c;时常会遇到让人眼前一亮的观点和想法。然而&#xff0c;当我们试图将这些精彩内容记录下来时&#xff0c;却常常感受到复制粘贴的繁琐。为了解决这个问题&#xff0c;NNote插件应运…

计算机网络物理层 习题答案及解析

2-1 下列选项中&#xff0c;不属于物理层接口规范定义范畴的是&#xff08; D &#xff09;。 A. 引脚功能 B. 接口形状 C. 信号电平 D. 传输媒体 【答案】D 【解析】 2-2 某网络在物理层规定&#xff0c;信号的电平范围为- 15V~15V &#xff0c; 电线长…

微信小程序开发系列-10组件间通信01

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》 《微信小程序开发系列-02注册小程序》 《微信小程序开发系列-03全局配置中的“window”和“tabBar”》 《微信小程序开发系列-04获取用户图像和昵称》 《微信小程序开发系列-05登录小程序》 《…

java生产设备效率管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web生产设备效率管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为ac…

kivy中的GridLayout

说明 GridLayout 是 Kivy 框架中的一个布局管理器&#xff0c;它允许你在网格中排列子控件。你可以指定网格的行数和列数&#xff0c;然后添加子控件到网格中。GridLayout 会自动调整子控件的位置和大小&#xff0c;以适应网格的单元格。 在 Kivy 框架中&#xff0c;size_hint…

动态内存分配函数

malloc void* malloc( unsigned size) 申请size个字节的地址连续的内存单元 成功则返回指向内存块的指针, 失败则返回NULL malloc不对申请的空间初始化 calloc void*calloc&#xff08;unsigned n&#xff0c;unsigmed size&#xff09; 申请n* size字节的个地址连续的内…

2024-01-01 服务器开发-11个最佳免费和便宜SSL证书颁发机构

摘要: 2024-01-01 服务器开发-11个最佳免费和便宜SSL证书颁发机构 ssl证书颁发机构 在网站上实施 SSL 证书不再被视为奢侈品。它不仅通过加密网站访问者与您的网站之间交换的通信来提高您的网站安全性&#xff0c;而且还提高了网站的 SEO 排名。此外&#xff0c;如果你托管的平…

深度学习核心技术与实践之计算机视觉篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分 计算机视觉背景 &#xff08;1&#xff09;视觉皮层的神经元是一列一列组织起来的&#xff0c;每一列神经元只喜欢某一种特定的形状或者某些简单的线条组合&#xff0c;而不是鱼、老鼠、鲜花 &#xff08;2&#xf…

HTTPS协议详解

目录 前言 一、HTTPS协议 1、加密是什么 2、为什么要加密 二、常见加密方式 1、对称加密 2、非对称加密 三、数据摘要与数据指纹 1、数据摘要 2、数据指纹 四、HTTPS加密策略探究 1、只使用对称加密 2、只使用非对称加密 3、双方都使用非对称加密 4、对称加密非…

如何使用Docker compose安装Spug并实现远程访问登录界面

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Docker安装Spug二. 本地访问测试三. Linux 安装cpolar四. 配置Spug公网访问…

Git:常用命令(一)

取得项目的Git 仓库 从当前目录初始化 1 git init 初始化后&#xff0c;在当前目录下会出现一个名为.git 的目录&#xff0c;所有Git 需要的数据和资源都存放在这个目录中。不过目前&#xff0c;仅仅是按照既有的结构框架初始化好了里边所有的文件和目录&#xff0c;但我们还…

Python备忘录工具:创建自己的备忘录应用

更多Python学习内容&#xff1a;ipengtao.com 在日常生活和工作中&#xff0c;经常需要记录重要信息、任务清单和想法。为了更好地管理这些信息&#xff0c;可以使用Python创建一个备忘录工具。本文将介绍如何使用Python开发一个简单而功能强大的备忘录应用&#xff0c;以及提供…

Redis源码——压缩列表

压缩列表ziplist本质上就是一个字节数组&#xff0c;是Redis为了节约内存而设计的一种线性数据结构&#xff0c;可以包含多个元素&#xff0c;每个元素可以是一个字节数组或一个整数。Redis的有序集合、散列和列表都直接或者间接使用了压缩列表。当有序集合或散列表的元素个数比…

使用 Hyper-V 创建虚拟机

使用 Hyper-V 创建虚拟机 官网教程修改存储目录Hyper-V管理器创建虚拟机启动虚拟机Win10安装教程Press any key to boot from CD or DVD...... 如何使用Windows自带的虚拟机工具来创建虚拟机&#xff0c; 快速创建虚拟机进行学习探讨&#xff0c;如果有环境问题可以立即创建一个…

牛客网SQL训练5—SQL大厂面试真题

文章目录 一、某音短视频1.各个视频的平均完播率2.平均播放进度大于60%的视频类别3.每类视频近一个月的转发量/率4.每个创作者每月的涨粉率及截止当前的总粉丝量5.国庆期间每类视频点赞量和转发量6.近一个月发布的视频中热度最高的top3视频 二、用户增长场景&#xff08;某度信…

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(二)

Matplotlib绘图技巧&#xff08;二&#xff09; 写在前面2. 函数间区域填充函数fill_between()和fill()参数&#xff1a; 3. 散点图 scatter4. 直方图 hist5. 条形图 bar5.1 一个数据样本的条形图参数&#xff1a; 5.2 多个数据样本进行对比的直方图5.3 水平条形图参数 5.4 绘制…

c盘扩容时,d盘无法删除卷问题

C盘扩容时&#xff0c;磁盘管理中D盘右键无法删除卷的原因 首先&#xff0c;D盘下文件夹为空&#xff0c;但是显示可用空间不是100%&#xff0c;经过排查&#xff0c;发现是虚拟内存设置在了D盘导致无法删除卷&#xff0c;这里只需要将虚拟内存放到其他盘&#xff0c;如E盘即可…