用C++编写的图书管理系统

2024-07-02

用C++编写的图书管理系统(共3篇)

1.用C++编写的图书管理系统 篇一

程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:(1)主菜单 学生成绩管理系统

1、成绩录入

2、成绩查询

3、成绩统计

4、退出(2)各菜单项功能 ① 成绩录入:输入学生的学号、姓名及三门课的成绩; ② 成绩查询:(至少一种查询方式)。v 按学号查询学生记录。v 查询不及格学生的记录。③成绩统计: v 计算学生的平均分; v 根据学生的平均分高低,对学生的数据进行排序后输出; v 对学生单科成绩排序,输出学生姓名与该科成绩; ④退出系统:退出整个系统(即主菜单)。(3)结构体数组: #define N 30 struct student {int num;/* 定义学号*/

char name[20];/* 定义姓名*/

float score[3];/* 定义存贮三门课成绩的数组*/

float average;/* 定义平均成绩*/

};struct student stu[N];/* 定义结构体数组,存贮多个学生的记录*/

.#include

#include

#include

struct student

{ int num;char name[20];

float score[4];

float average;

}

stu[10000];

long t,max;

bool unpass[1000];

FILE *fstu=fopen(“stud.dat”,“at+”);

int init()

{

int no,i;

float s[4],ave;

char nam[20];

while(!feof(fstu))

{

fscanf(fstu,“%d”,&no);

fscanf(fstu,“%s”,nam);

fscanf(fstu,“%f%f%f%f”,&s[1],&s[2],&s[3],&ave);

if(no>max)

max=no;

stu[no].num=no;

strcpy(stu[no].name,nam);

unpass[no]=false;f

or(i=1;i<=3;i++)

{

stu[no].score[i]=s[i];

if(s[i]<60)

unpass[no]=true;

}

stu[no].average=ave;

}

}

int stuinsert()

{

int no,i;

float s[3],sum;

char nam[20],cha;

loop:printf(“请输入学生的学号、姓名及三门课的成绩 n”);

scanf(“%d”,&no);scanf(“%s”,nam);

scanf(“%f%f%f/n”,&s[1],&s[2],&s[3]);

if(no>max)

max=no;

stu[no].num=no;

sum=0.0;

strcpy(stu[no].name,nam);

unpass[no]=false;

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

{

stu[no].score[i]=s[i];

sum=sum+s[i];

if(s[i]<60)

unpass[no]=true;

}

stu[no].average=sum/3.0;

fprintf(fstu,“n”);

fprintf(fstu,“%d %s %f %f %f %fn”,stu[no].num,stu[no].name,stu[no].score[1],stu[no].score[2],stu[no].score[3],stu[no].average);

}

int find(int x)

{

long i,no;

switch(x)

{

case 1:printf(“请输入学号:”);

scanf(“%d”,&no);

printf(“%d %s %f %f %f %fn”,stu[no].num,stu[no].name,stu[no].score[1], stu[no].score[2],stu[no].score[3],stu[no].average);

break;

case 2:for(i=1;i<=max;i++)if(unpass[i])printf(“%d %s %f %f %f %fn”,stu[i].num,stu[i].name,stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].average);

break;

}

}

int sort(int x)

{

extern int headprint(int x);

student so[1000];

int i,j,k,n;

switch(x)

{

case 1:for(i=1;i<=max;i++)if(stu[i].num==i)printf(“%d %s %fn”,i,stu[i].name,stu[i].average);

break;

case 2:n=0;

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

{

j=1;if(stu[i].num==i)

while((so[j].average>stu[i].average)&&(j<=n))

j++;n++;

for(k=n;k>=j;k--)so[k]=so[k-1];so[j]=stu[i];

}

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

printf(“%d %s %f %f %f %fn”,so[i].num,so[i].name,so[i].score[1],so[i].score[2],so[i].score[3],so[i].average);break;case 3:headprint(4);

}

}

int othersort(int x)

{

extern int headprint(int x);

student so[1000];

int i,j,k,n,q;q=0;

switch(x)

{

case 1:if(q==0)q=1;

case 2:if(q==0)q=2;

case 3:if(q==0)q=3;

n=0;

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

{

j=1;

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

while((so[j].score[q]>stu[i].score[q])&&(j<=n))

j++;

n++;

for(k=n;k>=j;k--)

so[k]=so[k-1];

so[j]=stu[i];

}

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

printf(“%d %s %fn”,so[i].num,so[i].name,so[i].score[q]);

break;

}

}

int select(int x)

{

extern int headprint(int x);

int p;

switch(x)

{

case 1:scanf(“%d”,&p);

switch(p)

{

case 1:stuinsert();

break;

case 2:headprint(2);

break;

case 3:headprint(3);

break;

case 4:t=0;

break;

}

break;

case 2:scanf(“%d”,&p);

find(p);

break;

case 3:scanf(“%d”,&p);

sort(p);

break;

case 4:scanf(“%d”,&p);

othersort(p);

break;

}

}

int headprint(int x)

{

switch(x)

{ case 1:printf(“学生成绩管理系统n”);

printf(“

1、成绩录入n”);printf(“

2、成绩查询n”);

printf(“

3、成绩统计n”);

printf(“

4、退出n”);

select(x);

break;

case 2:printf(“

1、按学号查询学生记录n”);

printf(“

2、查询不及格学生的记录n”);

select(x);

break;

case 3:printf(“

1、计算学生的平均分n”);

printf(“

2、根据学生的平均分高低,对学生的数据进行排序后输出n”);

5printf(“

3、对学生单科成绩排序,输出学生姓名与该科成绩n”);select(x);

break;

case 4:printf(“

1、第一科n”);printf(“

2、第二科n”);printf(“

3、第三科n”);select(x);break;;

}

}

int main()

{ max=0;t=1;

init();

loop:headprint(1);

if(t!=0)

goto loop;

}

2.用C++编写的图书管理系统 篇二

语音阅读属于电子技术的一种, 是一项根据语音波形中反映电子文档特征的语音参数, 自动转化电子文档的技术。与语音识别不同的是, 电子文档阅读机利用的是语言转变电子文档的一种形式, 而不考虑语音中的字词意思, 它强调电子文档;而语音识别的目的是识别出语音信号中的言语内容, 它强调共性。

一、语音提取

语音阅读系统中的特征检测即提取电子文档中能转化成语音的基本特征, 此特征应能有效地区分语音信息。考虑到特征的可量化性、训练样本的数量和系统性能的评价问题, 目前的语音阅读系统主要依靠较低层次的声学特征进行。

二、模式匹配

目前针对各种特征而提出的模式匹配方法的研究越来越深入, 这些方法大体可归为下述两种。

第一种, 概率统计方法。

语音中电子文档的信息是较为平稳的, 通过对稳态特征如基音、声门增益、低阶反射系数的统计分析, 可以利用均值、方差等统计量和概率密度函数进行分类判决。其优点是不用对特征参量在时域上进行规整, 比较适合文本有关的文档。

第二种, 矢量量化方法。

矢量量化最早是基于聚类分析的数据压缩编码技术。Helms首次将其用于语音阅读, 把每个文档的特定文本编成码本, 阅读时将测试文本按此码本进行编码, 以量化产生的失真度作为判决标准。Bell实验室的Rosenberg用VQ进行了孤立数字文本的语音阅读研究。这种方法的识别精度较高, 且判断速度快。

三、关于VC++

C++ 语言是在C语言的基础上逐步发展和完善起来的, 因此介绍C++ 语言不妨首先介绍一下C语言。

C语言具有许多优点, 比如语言简洁灵活, 运算符和数据结构丰富, 具有结构化控制语句, 程序执行效率高, 同时具有高级语言和汇编语言的优点等。与其他高级语言相比, C语言具有可以直接访问物理地址的优点, 与汇编语言相比又具有良好的可读性和可移植性。因此, C语言得到了极为广泛的应用。

随着C语言应用的推广, C语言存在的一些缺陷或不足也开始暴露出来, 并受到大家的关注。比如C语言对数据类型检查的机制比较弱, 缺少支持代码重用的结构;随着软件工程规模的扩大, 难以适应开发特大型程序。同时C语言毕竟是一种面向过程的编程语言, 已经不能满足运用面向对象的方法开发软件的需要。C++ 语言是在C语言基础上, 为克服C语言本身存在的缺点, 同时为支持面向对象的程序设计而研制出来的一种通用的程序设计语言, 它是在1980年由贝尔实验室的Bjarne Stroustrup创建的。

研制C++ 语言的一个重要目标是使C++ 语言首先是一个更好的C语言, 所以C++ 语言根除了C语言中存在的问题。C++ 语言的另一个重要目标就是面向对象的程序设计, 因此在C++ 语言中引入了类的机制。最初的C++ 语言被称为“带类的C”, 1983年正式命名为C++ (C Plus Plus) 语言。以后经过不断完善, 形成了目前的C++ 语言。

四、C++ 语言的特点

C++ 语言的主要特点表现在两个方面, 一是全面兼容C语言, 二是支持面向对象的程序设计方法。

C++ 语言是一个更好的C语言, 它保持了C语言的优点, 大多数的C语言程序代码略作修改或不作修改就可在C++ 语言的集成环境下调试和运行。这对于继承和开发当前已在广泛使用的软件是非常重要的, 可以节省大量的人力和物力。

C++ 语言是一种面向对象的程序设计语言。它使得程序的各个模块的独立性更强, 程序的可读性和可移植性更强, 程序代码的结构更加合理, 程序的扩充性更强。这对于设计、编制和调试一些大型的软件尤为重要。

一个C++ 程序的开发过程可分成如下几个步骤[1]:

(1) 分析问题。

(2) 编辑程序, 生成扩展名为.cpp的C++ 源程序文件。

(3) 编译程序, 产生扩展名为.obj的目标程序文件。

(4) 连接程序, 产生扩展名为.exe的可执行文件。

(5) 运行调试程序。

五、C++.NET简述

C++.NET战略给我们描绘了一个无比美妙的数字化世界, 但能否真正实现这个美妙的理想呢?各方面由于种种原因, 都对.NET有一些自己的看法, 这其中当然有微软的朋友也有微软的对手, 朋友们多数是称赞, 而对手们大都会给予猛烈的抨击。到底C++.NET的现状如何呢?哪方面对.NET的评论更客观呢?我们一起来看看。

首先我认为.NET的优点在于其前瞻性。在这样一个网络大环境逐渐改善, 移动设备、数字设备等应用兴起的时代, 人们已经有了很多对未来的设想, 但还缺乏这样一套全方位工具来帮助人们建立并实现这些梦想, C++.NET在这样一个时候出现, 正好满足了人们的需求, 可见Gates是吸取了上次Internet到来时的教训, 提前下手。应该说, 这次微软的确是抓住了先机, 而且从现在的情况来看, C++.NET战略还是很有进展的。

但C++.NET也不是完美的。各方面对其批评虽然都不够绝对公允, 但有些也是有道理的。首先一个问题就是垄断问题。C++.NET从最底层到上面的应用, 大部分都应用微软的平台或工具。虽然微软一再称其他第三方厂商也可以开发C++.NET产品, 但在微软的平台上, 无疑处处都会受限。Gates这招果然厉害, 正所谓醉翁之意不在酒。如果C++.NET战略部署成功, 那么微软将继DOS平台、Windows平台之后, 第三次形成巨大的垄断, 而且这次垄断的影响力将比上两次大的多得多, 这绝不是危言耸听。

其次是技术问题。微软自家的C++.NET, 虽然对外宣称能支持广泛的设备, 但其支持最好的只能是微软自家的东西, 其他厂商的东西可能会或多或少有这样那样的问题。更重要的是, 人们最关心的跨平台性和可移植性都还很差。这些都会影响和限制应用部署的选择方案和TCO。特别是现在Linux正在兴起, .NET如何在Linux下应用也成为人们关心的重要问题。这里额外说一句, 在微软看来, 原则上是不可能兼容竞争对手Linux平台的, 但Linux平台在微软一再打压下居然能活过来, 而且越活越好, 应用越来越广。面对Linux旺盛的生命力, 微软不得不重新考虑和Linux平台的关系, 与其花精力和金钱去打击压制Linux, 不如像对待Java一样, 把水搅混些, 顺便也赢得个好名声。这也是微软很厉害的一招[2]。

最后是.NET自身和大环境存在的各种问题。上面已经说了, 现在的大环境还不够成熟, 许多必要的条件还不具备。比如移动设备的广泛应用、移动设备功能要求更加强大、Web Services的普及和广泛应用、高速的有线和无线网络等等。这些在现阶段都不成熟或不完善, 而这些条件的实现仅靠微软一家显然是不行的, 要靠全社会甚至全世界科技水平的不断发展和有识之士的共同努力。我相信这天很快就会到来的。还有一个可以改进的问题是.NET自身也不够成熟, 无论是性能还是功能上, 都存在一些缺陷。当然, .NET还只是个刚诞生的大孩子, 还要通过不断的成长来改正这些问题。

六、C++.NET的发展

按Gates所说的, C++.NET第一个阶段主要的成果是建立了.NET战略思想, 宣传和提高了.NET战略的知名度, 在技术和工具方面主要是推出了.NET Framework 1.0, 并推出了Visual Studio.NET 2002开发工具。但第一步的工作只是很简单地实现了.NET战略中的一小部分, 接下来微软在2003年推出了Visual Studio.NET 2003开发工具, 改进了性能和功能方面的弱点, 让开发者更加方便快速高效地开发各种应用。在这套开发工具中, 微软增加了Visual J#.NET语言, 并改进了Visual C++.NET和Visual C#.NET, 使其功能更强大、性能更好, 这样就为喜欢使用不同类型语言的开发者提供了一个随意施展才华的场所。不仅如此, 微软还升级了Mobile Internet Toolkit, 使其支持更多新类型的设备, 并第一次将.NET Compact Framework集成进了这套开发工具中, 使移动应用的开发更加得心应手。

此外微软推出的Windows Server 2003, 这个操作系统是Windows 2000 Server的后继版本, 原本叫Windows.NET Server 2003, 后来考虑到这个操作系统平台对C++.NET的支持还不够, 还不足以冠以.NET的名称, 就放弃了原来的命名方式。但这个版本还是加入了许多新的特性, 是第二步.NET战略的重要一环。与此同时, 微软还推出和升级了一系列.NET Server产品, 如Exchange 2003 Server, ISA 2003 Server等等, 这些也都是第二步.NET战略的重要支柱。在未来的发展中, 微软的全线产品将会更加向.NET靠拢, 让用户进一步体验.NET带来的神奇感觉。

摘要:主要介绍了利用VC++来设计电子产品。VC++在我国电子产品应用上起着不可替代的作用, 介绍了制作产品用的VC++。

3.用VB编写抽签软件 篇三

在日常生活中我们常常需要用抽签来解决实际问题,比如在大学课堂,老师可以用随机抽签的方式来查看学生的出勤情况;在文艺晚会上,主持人可以用抽签的方式对观众进行奖品发送。而传统的人工抽签使得人力在处理大的样本容量时显得力不从心,由此,本软件以公平、公正、简洁、高效为编写原则,希望解决这一难题。

2 程序运行流程及实现代码

1)启动软件时,软件主界面只提供一个获得焦点的可操作按钮“选择文件”,如图1所示,单击其可引导用户利用弹出的对话框选择文本格式(*.txt)的抽签名单文件。

2)按提示选择抽签名单文本文件后会自动弹出如图2所示的对话框,让用户查看抽签名单是否正确,正确则点击“确定抽签数据”按钮就可返回至抽签软件主界面;如需对名单进行修改,则可点击“编辑抽签数据”按钮出现如图3所示的对话框,在该对话框中可完成在不改变抽签数据源文件的情况下临时修改抽签名单的需求;如果发现所选名单错误,则可在点击“确认”按钮后进入抽签主界面时重新选择抽签文件。

选择抽签名单文件的实现:

使用可返回文件地址和文件名的通用对话框控件进行文件筛选并导入抽签数据,对话框控件的过滤器设置为:【"文本文档(*.txt)"|*.txt|"所有文件(*.*)"|*.*】;为了避免用户的错误操作,通过设置按钮的Enabled属性,在不同条件下控制用户的操作行为。同时,在用户临时编辑抽签名单时,为了帮助用户理解操作界面上各按钮的功能,设置了该操作界面“删除”和“增加”按钮的Tool Tip Text属性,如图3所示是鼠标指针指向编辑抽签数据对话框中的“删除”按钮时,其Tool Tip Text值为【从抽签名单编辑框中删除项目】;将“增加”按钮的Tool Tip Text属性值设置为【向抽签名单编辑框中添加项目】。在“增加”按钮操作中,使用Input Box函数引导用户临时增加抽签条目,设置其为【info=Input Box("请输入需要增加的项目","增加","")】;在“删除”按钮的功能中,提供了多项选择并删除的功能,利用【For…next】循环语句批量删除所选项,利用Msg Box函数提醒用户的错误操作。

3)程序运行时提供了两种操作模式和两种抽签模式,分别为“手动抽签”,“自动抽签”“;重复抽签”,“条件抽签”。

软件默认为手动、重复抽签模式,即确定抽签名单后,单击“开始抽签”,待抽签名单循环一周后,原按钮自动转变为“停止抽签”按钮并激活,以此模式进行抽签,每一次的抽签名单都不变,且都与确认抽签名单一致。

主界面上“开始抽签”按钮的单击事件过程代码设计思想如下:

利用条件语句【If…Then…Else】,设置按钮功能替换【Timer1.Enabled=Not Timer1.Enabled】;【If Command2.Caption="开始抽签"Then Command2.Caption="停止抽签"】;记录抽签次数【Text1.Text="第"&z+1&"次抽签结果为"&vbCr Lf&Text2.Text&vb Cr Lf&Text1.Text】;【z=z+1】;利用计时器Timer1进行文本框Text2框内的名单替换和记录名单循环次数。

在手动、重复抽签模式的基础上增设了自动、条件抽签模式,当然,两种操作模式和抽签模式是可以随意搭配的,通过选择抽签模式按钮即可激活对应的抽签模式。右键单击“开始抽签”按钮即可激活自动抽签功能。设置此功能的初衷是为了解决大批量抽签时,人工操作的难题。同时,条件抽签可在特定场合下使用,比如在有奖抽签环节,获奖者便不能进入下一轮的抽签名单,于是在条件抽签模式下,系统会自动将上一轮的获奖者名单删去。

自动、条件筛选抽签模式实现思想如下:

首先由开始抽签按钮判断选择模式,如果用户选择了条件筛选模式,则执行删除上一次获奖者名单的操作。设置j变量为抽签名单代号,代码如下:

如果要切换回重复筛选模式,则在系统判断选择模式为重复筛选模式后,将确认的抽签名单重新载入抽签列表框即可。

自动抽签功能的实现,模仿了人工抽签的模式,即随机产生时间段,按下停止抽签按钮,得到抽签结果,再次按下开始抽签按钮,进行下一次抽签。当达到要求的次数b时告知用户抽签结束。所以,此功能应用了计时器控件Timer2和随机数命令【Randomize】,激活按钮单击事件过程——【Command2_Click】,由Msg Box函数告知用户,代码如下:

b值由用户激活自动抽签按钮时的Input Box输入【b=Input Box("请输入自动抽签的次数","输入",1)】

右键菜单的设置应用了VB中的Popup Menu功能,当系统判定用户在软件停止抽签的情况下单击鼠标右键时,激活右键菜单autom,autom_click过程部分关键代码如下:

3 抽签软件开发意义

本软件的成功编写对解决实际生活问题有极大意义。既可以满足用户对小样本容量手动抽签的需求,又可以节省用户体力,进行大样本容量的批量抽签。同时,在不改动源文件的条件下还可临时增、删抽签名单,省去了用户对源文件数据的处理步骤。软件特有的条件抽签模式使本软件在实际生活中的适用场合更加广泛。抽签模式强制性要求循环一周后随机抽签,保证了人工抽签不能保证的公平性,同时,软件自动记录抽签结果,支持抽签结果的保存,加强了用户在使用过程中的便捷性。

参考文献

[1]王建忠.Visual Basic程序设计[M].北京:科学出版社,2012.

上一篇:企业管理信息化的现状下一篇:中班体育游戏活动教案