A. C语言编译图书管理系统代码
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct BOOK
{
int id,usr[10],total,store,days[10];
char name[31],author[21];
}books[100];
/*上面是结构体的定义,用于存放书籍及借书的信息。*/
void page_title(char *menu_item)
{
clrscr();
printf(">>> 图 书 管 理 系 统 <<<\n\n- %s -\n\n",menu_item);
}
/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/
void return_confirm(void)
{
printf("\n按任意键返回……\n");
getch();
}
/*上面是返回前请求确认的函数,以便在返回前观察结果*/
int search_book(void)
{
int n,i;
printf("请输入图书序号:");
scanf("%d",&i);
for(n=0;n<100;n++)
{
if(books[n].id==i)
{
printf("书名:%s\n",books[n].name);
printf("作者:%s\n",books[n].author);
printf("存数:%d of ",books[n].store);
printf("%d\n",books[n].total);
return n;
}
}
printf("\n输入错误或无效图书序号.\n");
return -1;
}
/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返
回数组下标,如果找不到相应记录则提示错误并返回-1。*/
void book_out(void)
{
int n,s,l,d;
page_title("借阅图书");
if((n=search_book())!=-1&&books[n].store>0)
{
printf("请输入借书证序号:");
scanf("%d",&s);
printf("请输入可借天数:");
scanf("%d",&d);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==0)
{
books[n].usr[l]=s;
books[n].days[l]=d;
break;
}
}
books[n].store--;
}
if(n!=-1&&books[n].store==0) printf("此书已经全部借出.\n");
return_confirm();
}
/*上面是借书的函数,首先调用找书函数*/
void book_in(void)
{
int n,s,l;
page_title("归还图书");
if((n=search_book())!=-1&&books[n].store<books[n].total)
{
printf("借阅者图书证列表:\n");
for(l=0;l<10;l++)
if (books[n].usr[l]!=0)
printf("[%d] - %d天\n",books[n].usr[l],books[n].days[l]);
printf("请输入借书证序号:");
scanf("%d",&s);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==s)
{
books[n].usr[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();
}
void book_add(void)
{
int n;
page_title("注册新书");
for(n=0;n<100;n++)
if(books[n].id==0) break;
printf("序号:");
scanf("%d",&books[n].id);
printf("书名:");
scanf("%s",&books[n].name);
printf("作者:");
scanf("%s",&books[n].author);
printf("数量:");
scanf("%d",&books[n].total);
books[n].store=books[n].total;
return_confirm();
}
void book_del(void)
{
int n;
page_title("注销旧书");
if((n=search_book())!=-1) books[n].id=0;
printf("该书已注销.\n");
return_confirm();
}
void main(void)
{
menu: page_title("操作选单");
printf("请用数字键选择操作\n\n");
printf("1 借阅图书\n2 归还图书\n\n");
printf("3 注册新书\n4 注销旧书\n\n");
printf("\n0 退出\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}
{
int n;
page_title("广?症慕");
if((n=search_book())!=-1) books[n].id=0;
printf("乎慕厮广?.\n");
return_confirm();
}
void main(void)
{
menu: page_title("荷恬佥汽");
printf("萩喘方忖囚佥夲荷恬\n\n");
printf("1 処堋夕慕\n2 拷珊夕慕\n\n");
printf("3 广过仟慕\n4 广?症慕\n\n");
printf("\n0 曜竃\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}
自己运行一下
首先uname -r看一下你当前的linux内核版本
1、linux的源码是在/usr/src这个目录下,此目录有你电脑上各个版本的linux内核源代码,用uname -r命令可以查看你当前使用的是哪套内核,你把你下载的内核源码也保存到这个目录之下。
2、配置内核 make menuconfig,根据你的需要来进行选择,设置完保存之后会在当前目录下生成.config配置文件,以后的编译会根据这个来有选择的编译。
3、编译,依次执行make、make bzImage、make moles、make moles
4、安装,make install
5、.创建系统启动映像,到 /boot 目录下,执行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改启动项,因为你在启动的时候会出现多个内核供你选择,此事要选择你刚编译的那个版本,如果你的电脑没有等待时间,就会进入默认的,默认的那个取决于 /boot/grub/grub.cfg 文件的设置,找到if [ "${linux_gfx_mode}" != "text" ]这行,他的第一个就是你默认启动的那个内核,如果你刚编译的内核是在下面,就把代表这个内核的几行代码移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
当然你也可以修改 set default="0"来决定用哪个,看看你的内核在第几位,default就填几,不过我用过这种方法,貌似不好用。
重启过后你编译的内核源码就成功地运行了,如果出现问题,比如鼠标不能用,usb不识别等问题就好好查查你的make menuconfig这一步,改好后就万事ok了。
最后再用uname -r看看你的linux内核版本。是不是你刚下的那个呢!有没有成就感?
打字不易,如满意,望采纳。
C. 如何编译一个操作系统内核
戏台演戏,
D. 如何自己编译LINUX操作系统
编译这个难啊,还要网速允许
你可以编译
gentoo单纯的自己编译一个不属于任何现在的版本可能不是一
般人可以做到的
E. Linux下,有图形界面的编译器吗
看你用什么编程语言了?下面是十个杰出的开源开发工具,它们将帮你提升开发效率。
1、Bluefish
Bluefish是进行Web开发时最受欢迎的IDE之一。它能够处理编程和标记语言,但是该工具的重点用途在于创建动态和交互式网站。和许多 Linux应
用程序一样,Bluefish是一个轻量级工具,运行速度非常快,它所占据的资源只有同类工具的30%到40%。Bluefish可以一次打开多个文档
(最高可打开3500个文档)。它包含项目支持、远程文件支持、搜索和替换(包括正则表达式),无限撤消/重做、多语言定制语法高亮、窗口反斜线文本和多
编码支持等功能。
Bluefish最漂亮的功能之一是用户定义工具栏Quickba,它可以让你通过“右键点击并选择增加到
Quickbar”的方式来增加按钮。你可以增加任意HTML工具栏按钮到Quickbar上。Bluefish还有许多操作简化工具,可以帮助你增加不
同元素到你的代码中。需要一个 DHTML自动提交选择框?简单。从DHTML下拉列表中选择“自动提交选择框(Auto-submit Select
Box )”,然后填充必要的条目,就可以增加该元素到你的代码中。Bluefish有针对C、Apache、DHTML、DocBook、HTML、
PHP+HTML和SQL的智能向导。如果是手动开发自己的网站,你应该选择使用Bluefish这个工具。
该工具主页:http://bluefish.openoffice.nl/
2、Anjuta
Anjuta是一个免费的开源C和C++开发工具。
它的安装非常简单(在Mandriva上使用urpmi
anjuta命令),提供项目管理、应用程序向导、交互式调试器、一个强大的源代码编辑器(支持源浏览、代码完成和语法高亮功能)。Anjuta团队开发
的这个强大IDE非常易于使用,而且可以满足你的C和C++编程需求。
Anjuta具有一个灵活而强大的用户界面,让你可以在布局界面中拖拽工具来安排图形用
户界面,使其与你希望的设计最接近。而且每一个用户配置的布局对一个项目来说是可以持续生存的(因此你可以为每一个项目使用不同的布局)。Anjuta还
具有一个强大的插件系统,通过它你可以选择激活或关闭哪一个插件。而且与所有开源项目一样,你可以为Anjuta开发满足你自己需求的插件。在
Anjuta应用程序中最大的工具之一是项目管理器。这个工具几乎可以打开任何基于automake/autoconf的项目。这个项目管理器不会增加任
何基于Anjuta的信息到这个项目中,因此在Anjuta之外,你的项目同样可以被维护和开发。
该工具的主页:http://anjuta.sourceforge.net/
3、Glade
Glade是一个GNOME桌面环境下用于开发GTK+的RAD(迅速应用开发)工具。它的界面与GIMP非常类似,可以被用户进行定制化,甚至可以被嵌入到Anjuta中。
Glade包含许多界面创建控件,诸如文本框、对话标签、数字输入框和菜单等,让你可以更快速的开发界面。界面设计以XML格式存储,从而让这些设计可以被轻松的应用于外部工具中。
安装Glade的过程非常简单。举例来说,如果你使用Fedora操作系统,你可以使用命令“yum install glade3”来启动安装。Glade不像Anjuta一样具有一个强大的项目管理器,但是你可以在Glade中创建、编辑和保存项目。
该工具的主页:http://glade.gnome.org/
4、GCC
GCC是一个GNU编译器,支持C、C++、Objective-C、FORTRAN、Java和Ada等语言。它是一个命令行工具。
最常见的用途是作为C和C++代码的编译器。你可能会有疑问,一个工具如何编译不同语言的代码?非常简单:对于C来说,你调用“gcc”命令,而对于
C++来说,你调用“g++”命令。两个编译器在同一套工具集中。而且g++是一个编译器,而不仅仅是一个预处理器。它可以直接从源代码创建目标代码,而
无需使用一个中介首先从C++代码创建C代码。这样可以创建更好的目标代码,而且让你掌握更好的调试信息。
该工具的主页:http://gcc.gnu.org/
5、Kdevelop
Kdevelop创建于1998年,是一个非常易用的KDE桌面环境IDE。Kdevelop目前在GPL下发布,可以免费使用。
它是基于插件的,因此你可以通过增加和移除插件,来创建最适合你需要的功能。Kdevelop还支持描述性档案(profile)功能,因此不同设置的插件可以与特定项目关联在一起。
Kdevelop支持15种编程语言,对每一种语言有其特定的功能。Kdevelop还提供一个内置调试器、版本控制系统
(Subversion)、应用程序向导、文档查看器、代码段工具(code
snippets)、集成Doxygen、RADio工具、支持Ctags、代码格式重定、QuickOpen支持和停靠窗口和工具栏等功能。
Kdevelop最好的地方之一是,它替用户完成了众多底层的任务。不断处理make、automake和configure操作是一件令人讨厌的事情。
任何好程序员应该知道这些工具,Kdevelop包含了一个Automake管理器,简化了它们的使用。该工具另一个好用的功能是,该编译器的输出窗口是
彩色的,因此你可以很容易的立刻看到错误、警告和信息之间的区别。
6、GDB
严格来
说,GDB算不上一个开发者工具,不过它是多数*NIX开发者必备的工具之一。GDB就是GNU调试器。这个工具从命令行中启动,让开发者可以立即获得来
自另一个被执行的程序的即时反馈。如果你要创建、完成和发布一个应用程序,可能需要了解问题所在。为了帮助你发现这些问题,你可以从
gdb工具中启动这个程序,它将帮助你发现问题所在。通过GDB你可以完成如下任务:
·按照影响应用程序行为的指定参数、开关或输入来启动它;
·针对特定行为终止应用程序执行;
·当你的应用程序停止时检查发生的事情;
·修改应用程序,迅速进行测试。
在处理漏洞报告时,GDB也非常好用。
该工具的主页:http://www.gnu.org/software/gdb/
7、KompoZer
KompZer是一个易用的所见即所得(WYS/WYG)Web开发工具,其目标用户是希望创建一个专业Web站点,而又不想了解HTML的非技术用户。
KompoZer具有众多亮点功能。其中最强大的一点就是可以通过一个URL打开、编辑和上传一个网站。这个功能让你可以无需编辑HTML就可以简单的对网站进行更新。当然,前提是你必须具有网站的上传权限。在使用其它网站作为模板时,这个功能也非常有用。
你不能把KompoZer看作一个只适合初学者的工具。它是微软FrontPage和Adobe Dreamweaver的免费开源替代产品。和其竞争产品一样,KompoZer可以通过点击一个标签就实现代码编辑和预览界面的切换。
该工具的主页:http://www.kompozer.net/
8、Eclipse
Eclipse是一个Java语言编写的多语言支持的IDE,它具有一个丰富的插件系统,让你可以对其进行功能扩展。平均每月被下载的次数超过100万次,Eclipse是当今软件开发领域最强大的工具之一。实际上,Eclipse是开源开发的事实标准。
Eclipse最强大的地方或许在于其插件功能。在支持编程语言方面,Eclipse号称拥有高达58个插件。基于这个功能丰富的开发环境,Eclipse拥有一个巨大的开发者社区,而且很多机构都提供该IDE的培训,甚至在有的大学里将其列为课程之一。
该工具的主页:http://www.eclipse.org/
9、Make
Make是一个Linux工具,可以自动判断大型程序的哪一部分需要被编译。一旦判断出哪些需要被编译后,它将运行必要的命令来完成这个操作。当从源代码安装应用程序时,经常会用到Make,因此开源应用程序开发者应该对Make工具有比较深入的了解,明白如何使用它。
如果你计划开发一个需要从源代码安装的应用程序,你需要知道如何软件一个makefile。这个makefile描述了你应用程序中不同文件之间的关
系,并且包含了需要拼合在一起的声明。如果你熟悉应用程序安装的话,你会了解这个命令:./configure;make;make install。
10、Quanta Plus
与Kompozer类似,Quanta Plus也是一个HMTL开发工具。Quanta Plus支持所见即所得(WYSIWYG),也支持代码处理,它支持HTML、XHTML、CSS、XML(以及基于XML的语言)和PHP。
Quanta
Plus的特色功能包括快速标签完成、项目管理、实时预览、PHP调试器、CVS支持和子版本支持(需要插件支持)。相对来说,Kompozer的主要目
标用户是那些非技术专业用户,而Quanta Plus则是针对那些希望有一个好的所见即所得编辑器的技术型用户。
该工具的主页:http://quanta.kdewebdev.org/
F. 如何编译系统
首先准备好arm-linux-gcc的包,比如说是arm-linux-gcc-fh.tar.gz。 首先是解压缩,路径可以随便放,最好放在/opt这个目录下面。 使用如下命令: tar xvzf arm-linux-gcc-fh.tar.gz(空格)C(空格/(注意这之间的空格)。 然后就解压缩好了,接下来就是要修改一下配置文件了。 切换到root权限,输入如下命令: vi /etc/bash.bashrc 在最后面一行加入如下语句: export PATH=$PATH:/opt/***(***表示你的arm-linux-gcc这个可执行文件的路径); 最后,重启一下配置文件,使用如下命令: source /etc/bash.bashrc,
G. 如何用gentoo交叉编译一个基本系统
嵌入式系统的编译环境
为某个平台开发软件,首先需要一个编译环境。一般来说,编译环境包括三部分:工具 链/运行环境/编译方法。对于嵌入式系统来说,常见的编译环境有三种:
本地环境。如很流行的Ubuntu for ARM,利用官方制作好的目标机镜像(通常包含了 编译环境),直接在目标机上编译/安装软件,与PC机开发完全一样。这种方法简单省 事。缺点也显而易见,编译速度慢,耗时长,特别是较大的软件包(如xbmc)的时候, 程序员不是停下来喝杯咖啡就可以收摊,恐怕得打场通宵dota后才能看到结果 了…(或许distcc能有所改善)
虚拟环境。在PC上建立目标机的虚拟环境,如QEMU-ARM,然后chroot到虚拟环境 中编译/安装软件。这种方法利用了PC的处理能力,速度比本地环境要快得多,但 QEMU并不能完美的模拟目标机环境,如不支持某些系统调用等,这可能导致它不能 正确的编译某些软件。
交叉编译。为目标机交叉编译软件,这是最常规的办法,也是上面两种方法实现的基 础。说交叉编译是“脏活”,是因为需要手工解决软件包的所有依赖问题,手工编译 每一个软件包,并且解决软件包对目标机兼容问题… 看网上铺天盖地关于求教/指导 某个软件包如何正确交叉编译就知道,有多少程序员在被它虐?
gentoo下的交叉编译
gentoo是一个metadistribution,从源代码构建整个系统,同时支持很多不同的体 系如alpha/arm/hppa/ppc/sh/sparc/s390等,也为交叉编译提供了便利的工具,这是 其它二进制发行版没有办法比拟的(scratchbox也显得弱爆了)。
gentoo下的交叉编译通过crossdev和portage来实现。portage带来的好处是自 动解决依赖和自动升级更新系统,跟本机环境一样。
制作工具链
crossdev用来制作交叉工具链,并且还提供了交叉编译环境下的emerge的辅助脚本。如 下编译arm平台的工具链:
$ sudo crossdev -t arm-supertux-linux-gnueabi
这样,crossdev最终制作了符合“gentoo规范”的arm交叉编译器。
运行环境
crossdev生成/usr/arm-supertux-linux-gnueabi/目录作为目标系统 $buildroot。编译后生成的目标会被emerge到$buildroot,编译时依赖的环境(如 链接库/头文件/pkgconfig等)也都在$buildroot。
交叉编译
有了工具链/运行环境,使用的crossdev封装过的emerge,就可以自由的emerge了。 如交叉编译bash:
$ sudo emerge-arm-supertux-linux-gnueabi -avu bash
porage会自动把bash的依赖如ncurses/readline一起emerge到$buildroot。 交叉编译就是变得如此简单…
碰到的问题
站在巨人的肩膀上可以看的更远,前提是我们先要爬上巨人的肩膀。portage是一个快 速更新迭代的系统,并不完美,维护者没有办法测试每个软件包的所有兼容性。所以, 当你想安装一个图形环境如$emerge -avu enlightenment时,很可能会出现错误。但 portage提供了细粒度的控制帮助解决这样的问题。下面是我碰到过一些情形和解决方 法:
由于软件包的环境变量引起的问题,如链接库指向了/usr/bin,而非 $buildroot。可以配置$buldroot/etc/portage/env/目录下相应的文 件,portage会自动source该文件,从而改变编译时的环境。
portage没有包含该软件或portage自身的bug引起,如默认使能了某个在目标机 平台不能使用的特性。建立一个针对目标机的overlay,自己编写相应软件包的 ebuild文件指导portage进行交叉编译。
当某个软件包分阶段编译时,如perl编译时先生成miniperl,通过miniperl最 后生成perl目标映像。由于miniperl被交叉编译器生成目标机的映像,正常情况 下不能主机环境中继续运行生成最终的目标映像。这就要借助qemu-arm+binfmt模 拟目标机环境,让miniperl在主机环境中也能无缝的运行。
从形式上看,处理上面几种情况,也是“脏活”。不仅需要了解该软件包的编译环境, 还需要了解portage的原理,还要知道ebuild的书写语法。但是,与传统的交叉编译 方式比起来,这是一劳永逸的工作,别人使用我的运行环境和overlay,即不需再做什 么就能生成最终的目标机系统。
H. 怎么根据一个总图E-R图,画出一个子系统的用例图啊
概念弄混了,E-R图是用来设计数据库的,不是用来画用例图的。用例图是根据用例来话的,而用例是直接来源于实际业务需求的。建议你不要直接看UML相关的书,而是先找一本OOA/D方面的书看,理解面向对象的分析与设计的原理后再看UML的书,就简单得多了。
I. 一个典型的编译系统通常由哪些部分组成
编译系统又称为第二类编程环境开发者根据语言的规定编写源程序,然后进行编译、连接,生成可执行文件,例如DOS操作系统加各类高级语言,如FORTRAN、PASCLL、C语言等就属于这种类型接口平台,用于提供编译任务输入接口以及处理状态信息输出接口,并根据输入的编译任务生成任务名;编译服务器,用于解析所述任务名,获得相应的源代码,并进行编译,同时产生所述编译任务的处理状态信息提供给所述接口平台。 接收输入的编译任务; 根据所述编译任务生成任务名; 解析获得所述任务名对应的源代码; 所述源代码,并输出所述编译任务的处理状态信息; 处理状态信息,通过接口平台实时提供给客户端,简化了编译监控操作,大大节约了人力资源。
J. C语言图形编译
独立图形运行程序的建立
Turbo C对于用initgraph()函数直接进行的图形初始化程序, 在编译和链接
时并没有将相应的驱动程序(*.BGI)装入到执行程序, 当程序进行到intitgraph()
语句时, 再从该函数中第三个形式参数char *path中所规定的路径中去找相应的
驱动程序。若没有驱动程序, 则在C:\TC中去找, 如C:\TC中仍没有或TC不存在,
将会出现错误:
BGI Error: Graphics not initialized (use 'initgraph')
因此, 为了使用方便, 应该建立一个不需要驱动程序就能独立运行的可执行
图形程序,Turbo C中规定用下述步骤(这里以EGA、VGA显示器为例):
1. 在C:\TC子目录下输入命令:BGIOBJ EGAVGA
此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。
2. 在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文件中。
3. 在程序中initgraph()函数调用之前加上一句:
registerbgidriver(EGAVGA_driver):