操作系统源代码
gdal window 编译

gdal window 编译GDAL(Geospatial Data Abstraction Library)是一个开源的地理数据处理库,用于读取、写入和处理各种栅格和矢量地理数据格式。
在Windows平台上编译GDAL需要一些步骤,以下是一个基本的指南:1. 安装依赖项:在Windows上编译GDAL需要一些依赖项。
首先,您需要安装以下软件:* Visual Studio:如果您没有安装Visual Studio,可以从Microsoft 官方网站下载并安装适合您操作系统的版本。
* Windows SDK:下载并安装适用于您操作系统的Windows SDK。
* GDAL/OGR源代码:从GDAL官方网站下载适用于您的操作系统的源代码包。
2. 设置环境变量:解压GDAL源代码包并将其目录路径添加到系统环境变量中。
例如,如果GDAL源代码存储在`C:\gdal`目录下,可以按照以下步骤添加环境变量:* 打开“控制面板”并搜索“环境变量”。
* 点击“编辑系统环境变量”。
* 在弹出窗口中,点击“环境变量”按钮。
* 在“系统变量”部分,查找名为“Path”的变量,并双击它。
* 在编辑窗口中,将`C:\gdal\bin`添加到变量值的末尾,确保使用分号分隔每个路径。
* 点击“确定”关闭所有窗口。
3. 编译GDAL:打开Visual Studio,并使用命令行工具(如Windows PowerShell)执行以下命令:```shellcd C:\gdal\build\msvcmsbuild gdal.sln /p:Configuration=Release /p:Platform=x64 /maxcpucount /t:Build /clp:Summary```上述命令将在`C:\gdal\build\msvc`目录下执行构建操作。
您可以选择使用`/p:Configuration=Debug`参数来构建调试版本,或者使用`/p:Platform=x86`参数来构建32位版本。
操作系统课程设计报告Alarm-Clock

西安电子科技大学操作系统课程设计(2016年度)实验报告实验名称:Alarm-Clock班级:1403018姓名:张可心学号:14030188030一实验内容源代码devices/timer.c中有一个timer_sleep()函数。
定义如图1所示图1 timer_sleep()函数的定义该函数的功能是让调用它的线程睡眠一段时间(ticks),然后唤醒。
事实上,品同时已经实现该函数,只是使用的是“忙等待”的方法。
任务要求:重新实现timer_sleep()函数,避免“忙等待”的发生,设计一种策略并实现。
二分析及设计1. 阅读相关的源代码文件,并了解其中关键的数据结构和函数的含义:在xd/os/pintos/src/threads目录下的thread.h,thread.c文件,它们是有关线程初始化、阻塞、解除阻塞,线程调度等内容。
xd/os/pintos/src/devices/目录下的timer.h,timer.c文件,本实验要修改的timer_sleep()函数就在其中。
同时还要注意定时器中断的处理过程。
2. Thread.h中定义了一个结构体struct thread,这个结构体中用于存放线程的基本信息,如图2所示图2线程的基本信息3. Pintos中线程的状态有四种,在thread.h函数中的定义如图3图3 线程的状态定义4.系统的驱动:驱动力为定时器中断函数,定时器中断频率在timer.h中定义如图4所示图4 定时器中断频率由此可知一个定时器中断的时长大约为10ms,这里称为一个ticks。
5.中断处理过程中断处理函数的调用过程如图5所示图5中断处理函数的调用过程原线程中这个timer_sleep函数执行过程是不断地循环检测这个函数执行以及执行过后等待时长是否小于cpu的时钟周期,如果是,则重复循环等待,直至等待时间大于等于ticks,则执行线程后续代码。
此方法的缺点是,函数不断循环试探,占用cpu。
Linux教程菜鸟教程2024新版

进程控制
使用kill、pkill、killall等命令终止进程,使用 nohup、disown等命令使进程在后台运行。
3进程Βιβλιοθήκη 控使用systemd、supervisor等工具监控进程状态 ,实现进程自动重启、日志收集等功能。
系统资源监控与性能优化
05
数据存储与安全防护
磁盘分区与格式化操作指南
磁盘分区概念及作用
解释磁盘分区的含义,阐述分区对于数据管理和系统性能的重要性。
常见分区工具介绍
介绍在Linux系统中常用的分区工具,如fdisk、parted等,并说明各 自的特点和使用方法。
分区操作步骤详解
详细讲解使用分区工具进行磁盘分区的操作步骤,包括创建、删除、 调整分区大小等。
端口号
用于标识设备上运行的不同服务,常见端口号如80(HTTP)、22(SSH)等。
路由器与交换机
网络设备,用于实现不同网络之间的通信和数据传输。
TCP/IP协议栈
网络通信的基础协议,包括传输层的TCP和UDP协议、网络层的IP协议等。
网络配置工具及命令
ifconfig
用于配置和显示Linux内核中网络接 口的网络参数。
BIND(Berkeley Internet Name Domain): 一种常用的DNS服务器软件,用于配置和管理 DNS服务。
DHCP(Dynamic Host Configuration Protocol):动态主机配置协议,用于自动给网 络上的计算机分配IP地址和其他网络参数。
dhcpd:一种常用的DHCP服务器软件,用于配 置和管理DHCP服务,自动分配IP地址等网络参数 给客户端。
深入理解Android5源代码

深⼊理解Android5源代码深⼊理解Android 5 源代码1 Android系统介绍1.1 Android系统成功的秘诀1.1.1 获取了业界的⼴泛⽀持1.1.2 研发阵容强⼤1.1.3 为开发⼈员“精⼼定制”1.1.4 开源1.2 剖析Android系统架构1.2.1 底层操作系统层(OS)1.2.2 各种库(Libraries)和Android运⾏环境(RunTime)1.2.3 ApplicationFramework(应⽤程序框架)1.2.4 顶层应⽤程序(Application)1.3 五⼤组件1.3.1 Activity界⾯1.3.2 Intent和IntentFilters切换1.3.3 Service(服务)1.3.4 BroadcastReceiver发送⼴播1.3.5 ⽤ContentProvider存储数据1.4 进程和线程1.4.1 什么是进程1.4.2 什么是线程2 获取并编译Android源代码2.1 获取Android源代码2.1.1 在Linux系统中获取Android源代码2.1.2 在Windows平台获取Android源代码2.2 分析Android源代码结构2.2.1 总体结构2.2.2 应⽤程序部分2.2.3 应⽤程序框架部分2.2.4 系统服务部分2.2.5 系统程序库部分2.2.6 硬件抽象层部分2.3 Android源代码提供的接⼝2.3.1 暴露接⼝和隐藏接⼝2.3.2 调⽤隐藏接⼝2.4 编译源代码2.4.1 搭建编译环境2.4.2 在模拟器中运⾏2.5 编译源代码⽣成SDK3 分析Java Native Interface系统3.1 JNI基础3.1.1 JNI的功能结构3.1.2 JNI的调⽤层次3.1.3 分析JNI的本质3.2 分析MediaScanner3.2.1 分析Java层3.2.2 分析JNI层3.2.3 分析Native(本地)层3.3 分析Camera系统的JNI3.3.1 Java层预览接⼝3.3.2 注册预览的JNI函数3.3.3 C/C++层的预览函数4 分析HAL系统4.1 HAL基础4.1.1 推出HAL的背景4.1.2 HAL的基本结构4.2 分析HAL module架构4.2.1 hw_module_t4.2.2 结构hw_module_methods_t的定义4.2.3 hw_device_t结构4.3 分析⽂件hardware.c4.3.1 寻找动态链接库的地址4.3.2 数组variant_keys4.3.3 载⼊相应的库4.3.4 获得hw_module_t结构体4.4 分析硬件抽象层的加载过程4.5 分析硬件访问服务4.5.1 定义硬件访问服务接⼝4.5.2 具体实现4.6 分析Android官⽅实例4.6.1 获取实例⼯程源代码4.6.2 直接调⽤Service⽅法的实现代码4.6.3 通过Manager调⽤Service的实现代码4.7 HAL和系统移植4.7.1 移植各个Android部件的⽅式4.7.2 设置设备权限4.7.3 init.rc初始化4.7.4 ⽂件系统的属性5 分析IPC通信机制5.1 Binder机制概述5.2 分析Binder驱动程序5.2.1 分析数据结构5.2.2 分析设备初始化5.2.3 打开Binder设备⽂件5.2.4 内存映射5.2.5 释放物理页⾯5.2.6 分配内核缓冲区5.2.7 释放内核缓冲区5.2.8 查询内核缓冲区5.3 Binder封装库5.3.1 类BBinder5.3.2 类BpRefBase5.3.3 类IPCThreadState5.4 初始化Java层Binder框架5.5 分析MediaServer的通信机制5.5.1 MediaServer的⼊⼝函数5.5.2 ProcessState5.5.3 defaultServiceManager5.5.4 注册MediaPlayerService5.5.5 分析StartThread Pool和join Thread Pool6 分析Binder对象和Java接⼝6.1 分析实体对象(binder_node)6.2 分析本地对象(BBinder)6.3 分析引⽤对象(binder_ref)6.4 分析代理对象(BpBinder)6.5 分析Java接⼝6.5.1 获取Service Manager6.5.2 分析ActivityManagerService的Java层7 分析ServiceManager和MessageQueue 7.1 分析ServiceManager7.1.1 分析主⼊⼝函数7.1.2 打开Binder设备⽂件7.1.3 注册处理7.1.4 创建Binder实体对象7.1.5 尽职的循环7.1.6 将信息注册到ServiceManager7.1.7 分析MediaPlayerService和Client7.2 获得Service Manager接⼝7.3 分析MessageQueue7.3.1 创建MessageQueue7.3.2 提取消息7.3.3 分析函数nativePollOnce8 init进程和Zygote进程8.1 分析init进程8.1.1 分析⼊⼝函数8.1.2 分析配置⽂件8.1.3 分析Service8.1.4 解析on字段的内容8.1.5 init控制Service8.1.6 控制属性服务8.2 分析Zygote(孕育)进程8.2.1 Zygote基础8.2.2 分析Zygote的启动过程9 System进程和应⽤程序进程9.1 分析System进程9.1.1 启动System进程前的准备⼯作9.1.2 分析SystemServer9.1.3 分析EntropyService9.1.4 分析DropBoxManagerService9.1.5 分析DiskStatsService9.1.6 分析DeviceStorageManagerService(监测系统内存存储空间的状态)9.1.7 分析SamplingProfilerService9.2 分析应⽤程序进程9.2.1 创建应⽤程序9.2.2 启动线程池9.2.3 创建信息循环10 分析Activity组件10.1 Activity基础10.1.1 Activity状态10.1.2 剖析Activity中的主要函数10.2 分析Activity的启动源代码10.2.1 Launcher启动应⽤程序10.2.2 返回ActivityManagerService的远程接⼝10.2.3 解析intent的内容10.2.4 分析检查机制10.2.5 执⾏Activity组件的操作10.2.6 将Launcher推⼊Paused状态10.2.7 处理消息10.2.8 暂停完毕10.2.9 建⽴双向连接10.2.10 启动新的Activity10.2.11 通知机制10.2.12 发送消息11 应⽤程序管理服务——PackageManagerService分析11.1 PackageManagerService概述11.2 系统进程启动11.3 开始运⾏11.4 扫描APK⽂件11.5 解析并安装⽂件11.6 启动系统默认Home应⽤程序Launcher11.6.1 设置系统进程11.6.2 启动Home应⽤程序11.6.3 启动uncher11.6.4 加载应⽤程序11.6.5 获得Activity12 Content Provider存储机制12.1 Content Provider基础12.1.1 ContentProvider在应⽤程序中的架构12.1.2 ContentProvider的常⽤接⼝12.2 启动Content Provider12.2.1 获得对象接⼝12.2.2 存在校验12.2.3 启动Android应⽤程序12.2.4 根据进程启动Content Provider 12.2.5 处理消息12.2.6 具体启动12.3 Content Provider数据共享12.3.1 获取接⼝12.3.2 创建CursorWindow对象12.3.3 数据传递12.3.4 处理进程通信的请求12.3.5 数据操作13 分析⼴播机制源代码13.1 Broadcast基础13.2 发送⼴播信息13.2.1 intent描述指⽰13.2.2 传递⼴播信息13.2.3 封装传递13.2.4 处理发送请求13.2.5 查找⼴播接收者13.2.6 处理⼴播信息13.2.7 检查权限13.2.8 处理的进程通信请求13.3 分析BroadCastReceiver13.3.1 MainActivity的调⽤13.3.2 注册⼴播接收者13.3.3 获取接⼝对象13.3.4 处理进程间的通信请求14 分析电源管理系统14.1 Power Management架构基础14.2 分析Framework层14.2.1 ⽂件PowerManager.java14.2.2 提供PowerManager功能14.3 JNI层架构分析14.3.1 定义了两层之间的接⼝函数14.3.2 与Linux Kernel层进⾏交互14.4 Kernel(内核)层架构分析14.4.1 ⽂件power.c14.4.2 ⽂件earlysuspend.c14.4.3 ⽂件wakelock.c14.4.4 ⽂件resume.c14.4.5 ⽂件suspend.c14.4.6 ⽂件main.c14.4.7 proc⽂件14.5 wakelock和early_suspend14.5.1 wakelock的原理14.5.2 early_suspend的原理14.5.3 Android休眠14.5.4 Android唤醒14.6 Battery电池系统架构和管理14.6.1 实现驱动程序14.6.2 实现JNI本地代码14.6.3 Java层代码14.6.4 实现Uevent部分14.7 JobScheduler节能调度机制14.7.1 JobScheduler机制的推出背景14.7.2 JobScheduler的实现14.7.3 实现操作调度14.7.4 封装调度任务15 分析WindowManagerService系统15.1 WindowManagerService基础15.2 计算Activity窗⼝的⼤⼩15.2.1 实现View遍历15.2.2 函数relayoutWindow15.2.3 函数relayoutWindow15.2.4 拦截消息的处理类15.2.5 判断是否计算过16 分析电话系统16.1 Android电话系统详解16.1.1 电话系统简介16.1.2 电话系统结构16.1.3 驱动程序介绍16.1.4 RIL接⼝16.1.5 分析电话系统的实现流程16.2 电话系统中的⾳频模块16.2.1 ⾳频系统结构16.2.2 分析⾳频系统的层次16.3 分析拨号流程16.3.1 拨号界⾯16.3.2 实现Phone应⽤16.3.3 Call通话控制16.3.4 静态⽅法调⽤16.3.5 通话管理16.3.6 dial拨号16.3.7 状态跟踪16.3.8 RIL消息“出/⼊”⼝16.3.9 显⽰通话主界⾯17 分析短信系统17.1 短信系统的主界⾯17.2 发送普通短信17.3 发送彩信17.4 接收短信17.4.1 Java应⽤层的接收流程17.4.2 Framework层的处理过程18 Sensor传感器系统详解18.1 Android传感器系统概述18.2 Java层详解18.3 Frameworks层详解18.3.1 监听传感器的变化18.3.2 注册监听18.4 JNI层详解18.4.1 实现Native(本地)函数18.4.2 处理客户端数据18.4.3 处理服务端数据18.4.4 封装HAL层的代码18.4.5 处理消息队列18.5 HAL层详解19 分析SEAndroid系统19.1 SEAndroid概述19.1.1 内核空间19.1.2 ⽤户空间19.2 ⽂件安全上下⽂19.2.1 设置打包在ROM⾥⾯的⽂件的安全上下⽂19.2.2 设置虚拟⽂件系统的安全上下⽂19.2.3 设置应⽤程序数据⽂件的安全上下⽂19.3 进程安全上下⽂19.3.1 为独⽴进程静态地设置安全上下⽂19.3.2 为应⽤程序进程设置安全上下⽂20 分析ART系统20.1 对⽐Dalvik VM和ART20.2 启动ART20.2.1 运⾏app_process进程20.2.2 准备启动20.2.3 创建运⾏实例20.2.4 注册本地JNI函数20.2.5 启动守护进程20.2.6 解析参数20.2.7 初始化类、⽅法和域20.3 分析主函数main20.4 查找⽬标类20.4.1 函数LookupClass()20.4.2 函数DefineClass()20.4.3 函数InsertClass()20.4.4 函数LinkClass()20.5 类操作20.6 实现托管操作20.7 加载OAT⽂件20.7.1 产⽣OAT20.7.2 创建ART虚拟机20.7.3 解析启动参数并创建堆20.7.4 ⽣成指定⽬录⽂件20.7.5 加载OAT⽂件20.7.6 解析字段思维导图防⽌博客图床图⽚失效,防⽌图⽚源站外链:思维导图在线编辑链接:。
openharmony课程体系

openharmony课程体系OpenHarmony是一个开放源代码操作系统,面向多设备场景,可以在不同类型的设备上运行,包括手机、电视、平板电脑、智能手表、车载娱乐系统等。
OpenHarmony课程体系是指为开发者提供的一系列培训课程,帮助他们了解OpenHarmony操作系统的核心概念、技术基础和开发方法,从而能够更好地利用OpenHarmony进行应用开发。
OpenHarmony课程体系的目的是让开发者能够深入了解OpenHarmony操作系统的特点和优势,并且掌握相关的开发技术,以便能够高效地开发出适应不同设备的应用程序。
课程体系主要包括以下几个方面的内容:1. OpenHarmony操作系统基础知识:介绍OpenHarmony操作系统的起源、发展历程和特点,包括其架构、内核、驱动程序等基础知识。
通过这些课程,开发者可以深入了解OpenHarmony操作系统的原理和运行机制。
2. OpenHarmony开发环境搭建:这些课程主要介绍如何搭建OpenHarmony的开发环境,包括安装OpenHarmony开发工具、配置编译环境等。
通过这些课程,开发者可以掌握如何快速搭建开发环境,并且熟悉开发工具的使用方法。
3. OpenHarmony应用开发:这些课程主要介绍如何使用OpenHarmony进行应用开发,包括应用程序的开发流程、开发工具的使用、应用程序的调试和测试等。
通过这些课程,开发者可以学习到如何使用OpenHarmony提供的开发框架和API进行应用程序的开发。
4. OpenHarmony设备驱动开发:这些课程主要介绍如何开发OpenHarmony设备的驱动程序,包括驱动程序的编写、调试和测试等。
通过这些课程,开发者可以了解到如何与硬件设备进行交互,以及如何使用OpenHarmony提供的驱动开发工具。
5. OpenHarmony应用测试与发布:这些课程主要介绍如何进行OpenHarmony应用的测试和发布,包括测试方法、测试工具的使用、应用程序的发布流程等。
openharmony编译 gitee

一、openharmony编译介绍openharmony是华为公司开源的一款分布式操作系统,具有轻量、高可靠、灵活等特点。
其编译过程是用户开发openharmony系统时不可或缺的重要步骤,只有正确地编译openharmony系统,用户才能得到可用的操作系统镜像。
而在编译过程中,gitee是一个重要的评台,它为用户提供了openharmony系统源代码的托管和管理服务。
二、openharmony编译步骤1. 确认环境准备在进行openharmony的编译之前,用户需要确认自己的开发环境已经完全准备就绪,主要包括安装了必要的开发工具和依赖库,并且已经正确配置了相关环境变量。
2. 获取openharmony源代码用户需要首先从gitee评台上获取openharmony的源代码,这包括内核、驱动、应用程序等各个组件的源代码。
通过gitee的相关操作,用户可以将openharmony的源代码克隆到本地的开发环境中。
3. 设置编译环境针对openharmony的编译过程,用户需要根据自己的开发场景选择合适的编译环境,必要时进行一些配置操作,以确保编译过程能够顺利进行。
4. 执行编译命令在编译环境准备就绪之后,用户需要执行特定的编译命令,以开始openharmony系统的编译过程。
这个过程可能会需要一些时间,取决于用户的编译环境和编译目标。
5. 输出编译结果一旦编译完成,用户将会得到openharmony系统的镜像文件,可以将其烧录到相应的硬件设备中,从而运行和调试openharmony系统。
三、gitee评台在openharmony编译中的作用1. 源代码管理gitee为开发者提供了开源项目的托管服务,用户可以将openharmony的源代码上传到gitee评台上,并进行版本管理和分支管理等操作。
这使得多人协作开发更加方便,也可以更好地跟踪openharmony系统代码的变化。
2. 版本控制通过gitee评台,用户可以方便地管理openharmony系统的不同版本,包括发布版本、开发版本等。
系统错误提示代码解析
系统错误提示代码解析:0 0x0000 操作成功完成。
1 0x0001 函数不正确。
2 0x0002 系统找不到指定的文件。
3 0x0003 系统找不到指定的路径。
4 0x0004 系统无法打开文件。
5 0x0005 拒绝访问。
6 0x0006 句柄无效。
7 0x0007 存储控制块被损坏。
8 0x0008 存储空间不足,无法处理此命令。
9 0x0009 存储控制块地址无效。
10 0x000A 环境不正确。
11 0x000B 试图加载格式不正确的程序。
12 0x000C 访问码无效。
13 0x000D 数据无效。
14 0x000E 存储空间不足,无法完成此操作。
15 0x000F 系统找不到指定的驱动器。
16 0x0010 无法删除目录。
17 0x0011 系统无法将文件移到不同的驱动器。
18 0x0012 没有更多文件。
19 0x0013 媒体受写入保护。
20 0x0014 系统找不到指定的设备。
21 0x0015 设备未就绪。
22 0x0016 设备不识别此命令。
23 0x0017 数据错误(循环冗余检查)。
24 0x0018 程序发出命令,但命令长度不正确。
25 0x0019 驱动器找不到磁盘上特定区域或磁道。
26 0x001A 无法访问指定的磁盘或软盘。
27 0x001B 驱动器找不到请求的扇区。
28 0x001C 打印机缺纸。
29 0x001D 系统无法写入指定的设备。
30 0x001E 系统无法从指定的设备上读取。
31 0x001F 连到系统上的设备没有发挥作用。
32 0x0020 另一个程序正在使用此文件,进程无法访问。
33 0x0021 另一个程序已锁定文件的一部分,进程无法访问。
34 0x0022 驱动器中的软盘不对。
将%2 插入(卷序列号: %3)驱动器%1。
36 0x0024 用来共享的打开文件过多。
38 0x0026 已到文件结尾。
39 0x0027 磁盘已满。
50 0x0032 不支持请求。
医院管理系统源代码
#include<stdio.h>#include<Windows.h>//为以下system的函数的头文件#define N 100 //宏定义,下面在主程序中对N进行了使用。
N表示病人的个数,以后修改时可以直接修改这里。
int n;//整体变量,表示病人数typedef struct bingren//病人信息自己定义的结构体,建立所需要的数据类型{ /*c语言中给的数据结构不能满足需要,所以自己建立组合型数据结构*/char number[20];//定义number为整型数据,当number为0时退出。
不能超过4位char name[10];int xiaofei;//消费信息为实型int nianling;//年龄为整型数据char bingli[200];//病例信息为字符型数组,能输入99个汉字(还有\0)}BINGREN;//定义一个结构体变量为 BINGREN void xinghao()/*星号子函数模块,用于输出一排星号*/{int i;for(i = 0; i < 80; i++)//输出一排******号putchar('*');//输出*号}/*-----------输入信息子程序---------*/ void input(BINGREN *data, int *len) {int i;system("cls");//清屏system("title 病人信息录入菜单"); system("color 3f");//湖蓝色背景+亮白色字体printf("\n");//换行操作,目的是让下面显示的字的排布更好看printf("\n");//换行操作,目的是让下面显示的字的排布更好看printf( " 请输入需要输入的病人人数如果需要退出当前菜单请输入0.\n"); scanf("%d",&n);for(i=0;i<n;i++){printf("\n");//换行操作,目的是让下面显示的字的排布更好看printf(" 请输入第%d个病人ID号 :",i+1);scanf("%s", data[*len].number);//输入语句,输入的数字经过判断,如果是0则退回菜单页面。
postgresql win编译
postgresql win编译PostgreSQL是一款广泛使用的开源数据库系统,可以跨平台运行,支持Windows和Linux等多种操作系统。
本文将介绍如何在Windows 环境下编译PostgreSQL。
1. 安装编译工具在开始编译之前,需要先安装编译工具。
推荐使用Visual Studio,版本必须为2010或更高。
此外,还需要安装Perl和Python,并添加到系统环境变量中。
2. 下载PostgreSQL源代码从PostgreSQL官方网站下载源代码。
选择与你的系统版本和PostgreSQL版本相匹配的代码。
3. 配置配置文件在源代码包中找到“configure”文件。
该文件包含了必要的配置信息,需要根据你的环境进行相应的设置。
打开配置文件,先输入以下命令:./configure然后选择所需的功能,例如SSL支持,GSSAPI认证,IPv6支持等。
在Windows上,还需要指定Visual Studio版本和安装路径。
如果不需要其他特定的功能,可以默认使用configure提供的设置。
将配置文件保存并退出。
4. 编译源代码执行“make”命令来编译源代码,指定其他参数作为选项。
例如,使用“-j”选项来指定编译进程数量。
在Windows上,使用“nmake”命令代替“make”命令。
执行以下命令:make -j 4make install5. 配置PostgreSQL安装完成后,需要进行一些配置,以确保PostgreSQL可以连接到数据库并正常运行。
这些配置包括创建数据库集群,指定管理员用户,设置端口等。
可以手动修改PostgreSQL配置文件,也可以使用命令行程序“initdb”快速进行配置。
例如,执行以下命令:initdb -D /usr/local/pgsql/datapg_ctl -D /usr/local/pgsql/data -l logfile start6. 运行PostgreSQL运行PostgreSQL需要先启动服务器。
能源管理系统-源代码
登陆界面的源代码package loginframe;import java.awt.BorderLayout;import java.awt.GridBagLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.sql.Statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import java.awt.GridBagConstraints;import java.awt.Insets;import javax.swing.JPasswordField;import mainmenu.mainFrame;public class login extends JFrame implements ActionListener { /****/private static final long serialVersionUID = 1L;private Connection con = null;Statement stmt = null;private ResultSet r = null;private JLabel idlabel = new JLabel("ID ");private JTextField id = new JTextField(10);private JLabel pwdlabel = new JLabel("密码");private JPasswordField pwd = new JPasswordField(10);private JButton commit = new JButton("登陆");private String command = null;public login() {setTitle("能源管理系统");setSize(236, 248);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});getContentPane().setLayout(new GridBagLayout());JPanel jp1 = new JPanel();GridBagConstraints gbc_jp1 = new GridBagConstraints();gbc_jp1.anchor = GridBagConstraints.SOUTHEAST;gbc_jp1.insets = new Insets(0, 0, 5, 0);gbc_jp1.gridx = 0;gbc_jp1.gridy = 0;getContentPane().add(jp1, gbc_jp1);jp1.add(idlabel);jp1.add(id);JPanel jp2 = new JPanel();jp2.add(pwdlabel);jp2.add(pwd);JPanel jp9 = new JPanel();jp9.setLayout(new GridLayout(3, 1));jp9.add(jp2);JPanel jp10 = new JPanel();jp10.setLayout(new BorderLayout());jp10.add("West", jp9);jp9.add(commit);commit.addActionListener(this);GridBagConstraints gbc_jp10 = new GridBagConstraints();gbc_jp10.insets = new Insets(0, 0, 5, 0);gbc_jp10.gridx = 0;gbc_jp10.gridy = 1;getContentPane().add(jp10, gbc_jp10);try {String url = "jdbc:sqlserver://localhost:1433;databaseName=energy_management;integratedSecurity=true";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");System.out.println("驱动程序已装载");System.out.println("即将连接数据库");con = DriverManager.getConnection(url, "sa", "123456");System.out.println("load ok");stmt = con.createStatement();} catch (Exception ex) {System.out.println(ex.getMessage());}}public void actionPerformed(ActionEvent evt) {try {String uid = id.getText().trim();String upwd = pwd.getText();String c1 = " like '" + uid + "' ";String c2 = " like '" + upwd + "' ";command = "select * " + "from manager_info" + " where id "+ c1 + " and password " + c2;r = stmt.executeQuery(command);if (uid.length() != 0 || upwd.length() != 0) {if (r.next()) {JOptionPane.showMessageDialog(commit, "登陆成功", "提示",RMATION_MESSAGE);mainFrame mf = new mainFrame();mf.showf();setVisible(false);} else {JOptionPane.showMessageDialog(commit, "ID或者密码错误", "警告",JOptionPane.ERROR_MESSAGE);}} else {JOptionPane.showMessageDialog(commit, "ID或者密码不能为空", "警告",JOptionPane.ERROR_MESSAGE);}} catch (Exception ex) {System.out.println(ex.getMessage());}}public static void main(String args[]) {JFrame myframe = new login();myframe.setVisible(true);}}操作界面源代码package mainmenu;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JToolBar;import javax.swing.KeyStroke;import consume_query.Queryconsume;import price_management.queryprice;import price_management.updateprice;import user_info_insert.insert_user_information; import user_info_er_info_delete; import user_record_insert.insert_user_record;import loginframe.login;public class mainFrame extends JFrame {public mainFrame() {}/****/private static final long serialVersionUID = 1L;public static final int h = 200;public static final int w = 370;JFrame mainframe;public void showf() {mainframe = new JFrame();mainframe.setTitle("管理员操作");mainframe.setSize(500, 130);mainframe.setResizable(true);meaushow();showtool();mainframe.show();}public void meaushow() {JMenuBar meaubar = new JMenuBar();JMenu file = new JMenu("文件");JMenuItem logout = new JMenuItem("注销", 'L');JMenuItem exit = new JMenuItem("退出", 'E');JMenu help = new JMenu("帮助");JMenuItem about = new JMenuItem("关于", 'A');logout.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK));exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));logout.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {mainframe.setVisible(false);login myframe = new login();myframe.setVisible(true);}// TODO Auto-generated method stub});exit.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);// TODO Auto-generated method stub}});about.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(mainframe, "这是一个能源管理收费系统","关于",RMATION_MESSAGE);};});meaubar.add(file);meaubar.add(help);file.add(logout);file.add(exit);help.add(about);mainframe.setJMenuBar(meaubar);}public void showtool() {JToolBar toolbar = new JToolBar();JButton l1 = new JButton("用户信息录入");JButton l2 = new JButton("价格查询");JButton l3 = new JButton("价格更改");JButton l4 = new JButton("用户记录信息录入");JButton l5 = new JButton("收费查询");JButton l6 = new JButton("删除用户");toolbar.add(l1);toolbar.add(l2);toolbar.add(l3);toolbar.add(l4);toolbar.add(l5);toolbar.add(l6);Container contentpane = mainframe.getContentPane();contentpane.add(toolbar);l1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JFrame myframe = new insert_user_information();myframe.setVisible(true);// TODO Auto-generated method stub}});l2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JFrame myframe = new queryprice();myframe.setVisible(true);// TODO Auto-generated method stub}});l3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JFrame myframe = new updateprice();myframe.setVisible(true);// TODO Auto-generated method stub}});l4.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JFrame myframe = new insert_user_record();myframe.setVisible(true);}// TODO Auto-generated method stub});l5.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JFrame myframe = new Queryconsume();myframe.setVisible(true);}// TODO Auto-generated method stub});l6.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JFrame mFrame=new user_info_delete();mFrame.setVisible(true);// TODO Auto-generated method stub}});}public static void main(String args[]) {mainFrame mf = new mainFrame();mf.showf();}}各个操作的源代码:(1)录入用户基本信息:package user_info_insert;import java.awt.BorderLayout;import java.awt.GridBagLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Statement;import java.sql.Connection;import java.sql.DriverManager;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.SwingConstants;public class insert_user_information extends JFrame implements ActionListener { /****/private static final long serialVersionUID = 1L;private Connection con = null;Statement stmt = null;private JLabel Title = new JLabel("请输入新用户的信息", SwingConstants.CENTER); private JLabel idlabel = new JLabel("用户ID ");private JTextField id = new JTextField(15);private JLabel namelabel = new JLabel("姓名");private JTextField name = new JTextField(15);private JLabel sexlabel = new JLabel("性别");private JTextField sex = new JTextField(15);private JLabel addresslabel = new JLabel("家庭地址");private JTextField address = new JTextField(15);private JLabel telephonelabel = new JLabel("电话");private JTextField telephone = new JTextField(15);private JLabel workplacelabel = new JLabel("工作地点");private JTextField workplace = new JTextField(15);private JLabel departmentlabel = new JLabel("部门");private JTextField department = new JTextField(15);private JLabel remarklabel = new JLabel("备注");private JTextField remark = new JTextField(15);private JButton commit = new JButton("提交");public insert_user_information() {setTitle("用户信息录入");setSize(400, 400);getContentPane().setLayout(new GridBagLayout());JPanel jp1 = new JPanel();jp1.add(idlabel);jp1.add(id);JPanel jp2 = new JPanel();jp2.add(namelabel);jp2.add(name);JPanel jp3 = new JPanel();jp3.add(sexlabel);jp3.add(sex);JPanel jp4 = new JPanel();jp4.add(addresslabel);jp4.add(address);JPanel jp5 = new JPanel();jp5.add(telephonelabel);jp5.add(telephone);JPanel jp6 = new JPanel();jp6.add(workplacelabel);jp6.add(workplace);JPanel jp7 = new JPanel();jp7.add(departmentlabel);jp7.add(department);JPanel jp8 = new JPanel();jp8.add(remarklabel);jp8.add(remark);JPanel jp9 = new JPanel();jp9.setLayout(new GridLayout(9, 1));jp9.add(Title);jp9.add(jp1);jp9.add(jp2);jp9.add(jp3);jp9.add(jp4);jp9.add(jp5);jp9.add(jp6);jp9.add(jp7);jp9.add(jp8);JPanel jp10 = new JPanel();jp10.setLayout(new BorderLayout());jp10.add("Center", jp9);add(jp10);add(commit);commit.addActionListener(this);try {String url = "jdbc:sqlserver://localhost:1433;databaseName=energy_management;integratedSecurity=true";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");System.out.println("驱动程序已装载");System.out.println("即将连接数据库");con = DriverManager.getConnection(url, "sa", "123456");System.out.println("load ok");stmt = con.createStatement();} catch (Exception ex) {System.out.println(ex.getMessage());}}public void actionPerformed(ActionEvent evt) {String uid = id.getText().trim();String uname = name.getText().trim();String usex = sex.getText().trim();String uadd = address.getText().trim();String utele = telephone.getText().trim();String uwork = workplace.getText().trim();String udepart = department.getText().trim();String ure = remark.getText().trim();String command = "insert into user_info values('" + uid + "','" + uname+ "','" + usex + "','" + uadd + "','" + utele + "','" + uwork+ "','" + udepart + "','" + ure + "')";if (uid.length() != 0) {try {stmt.executeUpdate(command);JOptionPane.showMessageDialog(commit, "录入成功!", "提示",RMATION_MESSAGE);stmt.close();} catch (Exception ex) {System.out.println(ex.getMessage());JOptionPane.showMessageDialog(commit, "输入错误", "警告",JOptionPane.ERROR_MESSAGE);}} else {JOptionPane.showMessageDialog(commit, "ID不能为空", "警告",JOptionPane.ERROR_MESSAGE);}}public static void main(String args[]) {JFrame myframe = new insert_user_information();myframe.setVisible(true);}}(2)删除用户信息package user_info_insert;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class user_info_delete extends JFrame implements ActionListener { /****/private static final long serialVersionUID = 1L;private Connection connection = null;private Statement state = null;private JLabel title = new JLabel("请输入删除用户的ID");private JLabel idlabel = new JLabel("ID");private JTextField id = new JTextField(15);private JButton b = new JButton("提交");public user_info_delete() {setTitle("删除用户信息");setSize(400, 400);JPanel j1 = new JPanel();j1.add(idlabel);j1.add(id);JPanel j2 = new JPanel();j2.setLayout(new BorderLayout());j2.add("North", title);j2.add("Center", j1);j2.add("East", b);add(j2);pack();b.addActionListener(this);try {String url = "jdbc:sqlserver://localhost:1433;databaseName=energy_management;integratedSecurity=true";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");System.out.println("驱动程序已装载");System.out.println("即将连接数据库");connection = DriverManager.getConnection(url, "sa", "123456");System.out.println("load ok");state = connection.createStatement();} catch (Exception ex) {System.out.println(ex.getMessage());}}public void actionPerformed(ActionEvent evt) {String uid = id.getText().trim();String command = "delete from user_info where user_id='" + uid+"'";if (uid.length() != 0) {try {state.executeUpdate(command);JOptionPane.showMessageDialog(b, "删除成功!", "提示",RMATION_MESSAGE);} catch (Exception e) {System.out.println(e.getMessage());JOptionPane.showMessageDialog(b, "输入错误", "警告",JOptionPane.ERROR_MESSAGE);// TODO: handle exception }} else {JOptionPane.showMessageDialog(b, "ID不能为空", "警告",JOptionPane.ERROR_MESSAGE);}}public static void main(String args[]) {JFrame myframe = new user_info_delete();myframe.setVisible(true);}}价格查询:package price_management;import java.awt.BorderLayout;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.sql.Statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.SwingConstants;import mainmenu.mainFrame;public class queryprice extends JFrame implements ActionListener {/****/private static final long serialVersionUID = 1L;private Connection con = null;Statement stmt = null;private ResultSet rs = null;private JLabel conditionlabel = new JLabel("请输入查询条件", SwingConstants.CENTER);private JLabel ftimelabel = new JLabel("开始时间", SwingConstants.RIGHT);private JLabel ltimelabel = new JLabel("结束时间", SwingConstants.RIGHT);private JTextField ftime = new JTextField(10);private JTextField ltime = new JTextField(10);private JButton commit = new JButton("提交");private JTextArea resultarea = new JTextArea(5, 15);private String command = null;public queryprice() {setTitle("价格查询");setSize(500, 250);getContentPane().setLayout(new GridBagLayout());JPanel jp1 = new JPanel();jp1.add(ftimelabel);jp1.add(ftime);jp1.add(ltimelabel);jp1.add(ltime);JPanel jp2 = new JPanel();jp2.setLayout(new BorderLayout());jp2.add("North", conditionlabel);jp2.add("Center", jp1);jp2.add("East", commit);JPanel jp3 = new JPanel();jp3.setLayout(new BorderLayout());jp3.add("North", jp2);jp3.add("Center", new JScrollPane(resultarea));add(jp3);resultarea.setEditable(false);resultarea.setLineWrap(true);commit.addActionListener(this);try {String url = "jdbc:sqlserver://localhost:1433;databaseName=energy_management;integratedSecurity=true";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");System.out.println("驱动程序已装载");System.out.println("即将连接数据库");con = DriverManager.getConnection(url, "sa", "123456");System.out.println("load ok");stmt = con.createStatement();} catch (Exception ex) {resultarea.append(ex.getMessage() + "\n");}}public void actionPerformed(ActionEvent evt) {try {String ftimevalue = ftime.getText();String ltimevalue = ltime.getText();String stime;stime = " between '" + ftimevalue + "' and '" + ltimevalue + "'";command = "select * " + "from price " + "where time" + stime;rs = stmt.executeQuery(command);resultarea.setText("");if (!rs.next())JOptionPane.showMessageDialog(commit, "找不到符合此条件的记录", "警告",JOptionPane.ERROR_MESSAGE);else {do {String rename = rs.getString("time");String resex = rs.getString("water_price");String reage = rs.getString("electricity_price");String remajor = rs.getString("gas_price");resultarea.append(rename + " 水价");resultarea.append(resex + " 电价");resultarea.append(reage + " 气价");resultarea.append(remajor + "\n");} while (rs.next());}} catch (Exception ex) {resultarea.append(ex.getMessage() + "\n");JOptionPane.showMessageDialog(commit, "输入错误", "警告",JOptionPane.ERROR_MESSAGE);}}public static void main(String args[]) {JFrame myframe = new queryprice();myframe.setVisible(true);}}更新价格:package price_management;import java.awt.BorderLayout;import java.awt.GridBagLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.sql.Statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.SwingConstants;import mainmenu.mainFrame;public class updateprice extends JFrame implements ActionListener { private Connection con = null;Statement stmt = null;private JLabel Title = new JLabel("请输入更改价格",SwingConstants.CENTER);private JLabel timelabel = new JLabel("时间");private JTextField time = new JTextField(10);private JLabel wpricelabel = new JLabel("水价");private JTextField wprice = new JTextField(10);private JLabel epricelabel = new JLabel("电价");private JTextField eprice = new JTextField(10);private JLabel gpricelabel = new JLabel("气价");private JTextField gprice = new JTextField(10);private JButton commit = new JButton("提交");private String command = null;public updateprice() {setTitle("价格信息更改");setSize(280, 300);getContentPane().setLayout(new GridBagLayout());JPanel jp1 = new JPanel();jp1.add(timelabel);jp1.add(time);JPanel jp2 = new JPanel();jp2.add(wpricelabel);jp2.add(wprice);JPanel jp3 = new JPanel();jp3.add(epricelabel);jp3.add(eprice);JPanel jp4 = new JPanel();jp4.add(gpricelabel);jp4.add(gprice);JPanel jp9 = new JPanel();jp9.setLayout(new GridLayout(5, 1));jp9.add(Title);jp9.add(jp1);jp9.add(jp2);jp9.add(jp3);jp9.add(jp4);JPanel jp10 = new JPanel();jp10.setLayout(new BorderLayout());jp10.add("West", jp9);add(jp10);add(commit);commit.addActionListener(this);try {String url = "jdbc:sqlserver://localhost:1433;databaseName=energy_management;integratedSecurity=true";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");System.out.println("驱动程序已装载");System.out.println("即将连接数据库");con = DriverManager.getConnection(url, "sa", "123456");System.out.println("load ok");stmt = con.createStatement();} catch (Exception ex) {System.out.println(ex.getMessage());}}public void actionPerformed(ActionEvent evt) {String uid = time.getText().trim();String uname = wprice.getText().trim();String usex = eprice.getText().trim();String uadd = gprice.getText().trim();String command = "insert into price values('" + uid + "','" + uname+ "','" + usex + "','" + uadd + "')";if(uid.length()!=0){try {stmt.executeUpdate(command);JOptionPane.showMessageDialog(commit,"修改成功!","提示",RMATION_MESSAGE);} catch (Exception ex) {System.out.println(ex.getMessage());JOptionPane.showMessageDialog(commit, "输入错误", "警告",JOptionPane.ERROR_MESSAGE);}}else{JOptionPane.showMessageDialog(commit, "时间不能为空", "警告",JOptionPane.ERROR_MESSAGE);}}public static void main(String args[]){JFrame myframe=new updateprice();myframe.setVisible(true);}}用户消费信息录入:package user_record_insert;import java.awt.BorderLayout;import java.awt.GridBagLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.sql.Statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.SwingConstants;import mainmenu.mainFrame;import user_info_insert.insert_user_information;public class insert_user_record extends JFrame implements ActionListener { private Connection con = null;Statement stmt = null;private JLabel Title = new JLabel("请输入用户记录信息", SwingConstants.CENTER);private JLabel idlabel = new JLabel("用户ID ");private JTextField id = new JTextField(15);private JLabel waterlabel = new JLabel("水用量");private JTextField water = new JTextField(15);private JLabel electricitylabel = new JLabel("电用量");private JTextField electricity = new JTextField(15);private JLabel gaslabel = new JLabel("燃气用量");private JTextField gas = new JTextField(15);private JLabel recordtimelabel = new JLabel("记录时间");private JTextField recordtime = new JTextField(15);private JLabel ispaylael = new JLabel("是否支付");private JTextField ispay = new JTextField(15);private JButton commit = new JButton("提交");public insert_user_record() {setTitle("用户记录信息录入");setSize(350, 350);getContentPane().setLayout(new GridBagLayout());JPanel jp1 = new JPanel();jp1.add(idlabel);jp1.add(id);JPanel jp2 = new JPanel();jp2.add(waterlabel);jp2.add(water);JPanel jp3 = new JPanel();jp3.add(electricitylabel);jp3.add(electricity);JPanel jp4 = new JPanel();jp4.add(gaslabel);jp4.add(gas);JPanel jp5 = new JPanel();jp5.add(recordtimelabel);jp5.add(recordtime);JPanel jp6 = new JPanel();jp6.add(ispaylael);jp6.add(ispay);JPanel jp9 = new JPanel();jp9.setLayout(new GridLayout(7, 1));jp9.add(Title);jp9.add(jp1);jp9.add(jp2);jp9.add(jp3);jp9.add(jp4);jp9.add(jp5);jp9.add(jp6);JPanel jp10 = new JPanel();jp10.setLayout(new BorderLayout());jp10.add("Center", jp9);add(jp10);add(commit);commit.addActionListener(this);try {String url = "jdbc:sqlserver://localhost:1433;databaseName=energy_management;integratedSecurity=true";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");System.out.println("驱动程序已装载");System.out.println("即将连接数据库");con = DriverManager.getConnection(url, "sa", "123456");System.out.println("load ok");stmt = con.createStatement();} catch (Exception ex) {System.out.println(ex.getMessage());}}public void actionPerformed(ActionEvent evt) {String uid = id.getText().trim();String uname = water.getText().trim();String usex = gas.getText().trim();String uadd = electricity.getText().trim();String utele = recordtime.getText();String uS = ispay.getText().trim();String command = "insert into user_record values" + "('" + uid + "','"+ uname + "','" + uadd + "','" + usex + "','" + utele + "','"+ uS + "')";if (uid.length() != 0) {try {stmt.executeUpdate(command);JOptionPane.showMessageDialog(commit, "录入成功!", "提示",RMATION_MESSAGE);} catch (Exception ex) {System.out.println(ex.getMessage());JOptionPane.showMessageDialog(commit, "输入错误", "警告",JOptionPane.ERROR_MESSAGE);}} else {JOptionPane.showMessageDialog(commit, "ID不能为空", "警告",JOptionPane.ERROR_MESSAGE);}}public static void main(String args[]) {JFrame myframe = new insert_user_record();myframe.setVisible(true);}}用户消费信息查询:package consume_query;import java.awt.BorderLayout;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.sql.Statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}#include<stdio.h> #include<time.h>#include<stdlib.h> int memoryStartAddress = -1; int memorySize = -1; struct jobList /* 作业 ID */int size; /* 作业大小(需要的存储空间大小) */ int status; /* 作业状态 0 : new job ,1 : in the memory , 2 : finished . *//* 分区起始地址 */ /* 分区中存放作业 ID */ /* 分区链表指针 *//*出现严重错误时显示信息并结束程序{printf("\n\tError !\a"); printf("\nPress any key toexit !"); getch(); exit(1);}void openFile(FILE **fp,char *filename,char *mode)/* 以要求的方式打开文件 */{if((*fp = fopen(filename,mode)) == NULL){printf("\nCan't open %s in mode %s.",filename,mode); errorMessage();int id;struct jobList *next; }; struct freeList/* 作业链表指针 */ {int startAddress; /* 分区起始地址 */int size; struct freeList*next; }; struct usedList/* 分区大小 */ /* 分区链表指针 */{int startAddress;int jobID;struct usedList *next; };void errorMessage(void)*/}void makeFreeNode(struct freeList **empty,int startAddress,int size)/* 根据参数startAddress、size 创建空闲节点,由empty 指针返回*/ {if((*empty = malloc(sizeof(struct freeList))) == NULL){ printf("\nNot enough to allocate for the free node ."); errorMessage();}(*empty)->startAddress = startAddress;(*empty)->size = size;(*empty)->next = NULL;}void iniMemory(void) /* 初始化存储空间起始地址、大小*/{char MSA[10],MS[10];printf("\nPlease input the start address of the memory !"); scanf("%s",MSA); memoryStartAddress = atoi(MSA); printf("\nPlease input the size of the memory !");scanf("%s",MS);memorySize = atoi(MS);}char selectFitMethod(void) /* 选择适应算法*/{FILE *fp;char fitMethod;do{ printf("\n\nPlease input a char as fallow to select the fit method !\ \n 1 (Best fit) \\n 2 (Worst fit) \\n 3 (First fit) \\n 4 (Last fit)\n"); fitMethod = getche();}while(fitMethod < '1' || fitMethod > '4'); openFile(&fp,"d:\\result.cl","a"); switch(fitMethod) {case '1': fprintf(fp,"\n\n\n\n\tBest fit");fprintf(fp,"\n **********************************************");break;case '2':fprintf(fp,"\n\n\n\n\tWorst fit");fprintf(fp,"\n **********************************************");break;case '3':fprintf(fp,"\n\n\n\n\tFirst fit"); fprintf(fp,"\nbreak;case '4': fprintf(fp,"\n\n\n\n\tLast fit");break;}fclose(fp);return fitMethod;}void inputJob(void) /* 从键盘输入作业到 D 盘的 JOB 文件 */ { int /*id,size, */status = 0,jobnum = 0; FILE *fp;char id[10],size[10]; openFile(&fp,"d:\\job.cl","w"); fprintf(fp,"job_ID\tsize\tstatus"); printf("\n\n\n\nPlease input the jobs as fallow !\\nEnter a integer smaller than 1 to quit .\njob_ID\tsize\n"); do{ /* scanf("%d%d",&id,&size); */ scanf("%s\t%s",id,size); if(atoi(id) > 0 &&atoi(size) > 0) {fprintf(fp,"\n%s\t%s\t%d",id,size,status);/* fprintf(fp,"\n%d\t%d\t%d",id,size,status); */ jobnum++;}else break; }while(1);if(jobnum) printf("\nFinished to input the jobs !"); else{printf("\nNo job was given ."); errorMessage();}fclose(fp);}int makeJobList(struct jobList **jobs)/* 从 JOB 文件中读出作业并创建作业链表 */ {char jobID[10],size[10],status[10]; struct jobList *rear; FILE *fp;);fprintf(fp,"\n **********************************************H );openFile(&fp,"d:\\job.cl","r"); fscanf(fp,"%s%s%s",jobID,size,status);if((*jobs = malloc(sizeof(struct jobList))) == NULL){ printf("\nNot enough to allocate for the job ."); fclose(fp);errorMessage();}rear = *jobs;(*jobs)->next = NULL; while(!feof(fp)){struct jobList *p; fscanf(fp,"%s%s%s",jobID,size,status);if((p = malloc(sizeof(struct jobList))) == NULL) {printf("\nNot enough to allocate for the job ."); fclose(fp);errorMessage();} p -> next = rear -> next; rear -> next = p; rear = rear -> next; rear -> id = atoi(jobID);rear -> size = atoi(size);rear -> status = atoi(status);}fclose(fp);return 0;}int updateJobFile(struct jobList *jobs) /* 更新作业链表中作业的状态*/{FILE *fp;struct jobList *p;openFile(&fp,"d:\\job.cl","w"); fprintf(fp,"job_ID\tsize\tstatus"); for(p = jobs -> next;p;p = p -> next)fprintf(fp,"\n%d\t%d\t%d",p->id,p->size,p->status);fclose(fp);return 0;}int showFreeList(struct freeList *empty) /* 空闲分区队列显示*/{FILE *fp;struct freeList *p = empty -> next;int count = 0; openFile(&fp,"d:\\result.cl","a");fprintf(fp,"\n\nNow show the free list..."); printf("\n\nNow show the free list...");if(p){ fprintf(fp,"\nnumber\tsize\tstartAddress"); printf("\nnumber\tsize\tstartAddress");for(;p;p = p -> next){fprintf(fp,"\n%d\t%d\t%d",++count,p -> size,p -> startAddress);printf("\n%d\t%d\t%d",count,p -> size,p -> startAddress);}fclose(fp);return 1;}elsefprintf(fp,"\nThe memory was used out !");printf("\nThe memory was used out !"); fclose(fp);return 0;} } void getJobInfo(struct jobList *jobs,int id,int *size,int *status)/* 获取作业的信息*/ {struct jobList *p = jobs->next; while(p && p->id != id) p = p->next;if(p == NULL){ printf("\nCan't find the job which id is : %d .",id); errorMessage();}else{*size = p -> size; *status = p -> status;}}void updateJobStatus(struct jobList **jobs,int id,int status){struct jobList *p = (*jobs)->next; while(p && p->id != id) p = p->next;if(p == NULL){ printf("\nCan't find the job which id is : %d .",id); errorMessage();}else p -> status = status;}int showUsedList(struct jobList *jobs,struct usedList *used)/* 作业占用链表显示*/{FILE *fp;struct usedList *p = used -> next;int count = 0,size,status; openFile(&fp,"d:\\result.cl","a"); fprintf(fp,"\n\nNow show the used list..."); printf("\n\nNow show the used list...");if(p){ fprintf(fp,"\nnumber\tjobID\tsize\tstartAddress");printf("\nnumber\tjobID\tsize\tstartAddress"); for(;p;p = p -> next){ getJobInfo(jobs,p -> jobID,&size,&status);fprintf(fp,"\n%d\t%d\t%d\t%d",++count,p->jobID,size,p-> startAddress);printf("\n%d\t%d\t%d\t%d",count,p->jobID,size,p-> startAddress);} fclose(fp); return 1;}else{fprintf(fp,"\nNo job in the memory ! You should input some jobs to it.");printf("\nNo job in the memory ! You should input some jobs to it."); fclose(fp);return 0;}}int showJobList(struct jobList *jobs) /* 显示作业链表*/{struct jobList *p; p = jobs->next; if(p == NULL) {printf("\nNo job in the list ! Try again next time."); return 0;} printf("\n\nThe job list is as fallow :\njob_ID\tsize\tstatus"); while(p) { printf("\n%d\t%d\t%d",p->id,p->size,p->status); p = p->next;}return 1;}void moveFragment(struct jobList *jobs,struct freeList **empty,struct usedList **used) {int size,status;struct usedList *p;int address = memoryStartAddress;/* 全局变量,初始化时分配存储空间始址*/if((*empty)->next == NULL) /* 空闲分区链表为空,提示并返回*/{printf("\nThe memory was used out at all.\nMay be you should finish some jobs first or press any key to try again !");getch();return;}for(p = (*used) -> next;p;p = p-> next)/* 循环的修改占用分区的始址*/{p -> startAddress = address; getJobInfo(jobs,p -> jobID,&size,&status);/* 由作业ID 获得作业大小*/ address += size;}(*empty)->next->startAddress = address;/* 修改空闲分区的首节点始址、大小*/(*empty) -> next -> size = memorySize - (address - memoryStartAddress);(*empty) -> next -> next = NULL;/* 删除首节点后的所有节点*/}void order(struct freeList **empty,int bySize,int inc){struct freeList *p,*q,*temp;int startAddress,size;for(p = (*empty) -> next;p;p = p -> next){ /* 按bySize 和inc 两个参数寻找合适的节点,用temp 指向它*/ for(temp = q = p;q;q = q -> next)switch(bySize){{{case 0 : switch(inc){case 0:if(q->size < temp->size) temp = q;break;default:if(q->size > temp->size) temp = q;break;} break; default:switch(inc){case 0:if(q->startAddress < temp->startAddress) temp =q;break;default:if(q->startAddress > temp->startAddress) temp =q;break;} break;}} /* 交换节点的成员值*/ if(temp != p){ startAddress = p->startAddress; size = p->size;p->startAddress = temp->startAddress; p->size = temp->size;temp->startAddress = startAddress; temp->size = size;}}}int allocate(struct freeList **empty,int size)/* 为作业分配存储空间、状态必须为0*/{struct freeList *p,*prep;int startAddress = -1;p = (*empty) -> next; while(p && p->size < size) p = p -> next; if(p != NULL)if(p -> size > size){startAddress = p -> startAddress;p -> startAddress += size;p -> size -= size;}else{startAddress = p -> startAddress;prep = *empty; while(prep -> next != p) prep = prep -> next;prep -> next = p -> next;free(p);}}else printf("\nMay be you should move the fragment together ."); /* Unsuccessful ! */ return startAddress;}void insertUsedNode(struct usedList **used,int id,int startAddress) /* 插入释放的空间到USed链表中(作业号为id , StartAddreSS由函数13返回)*/{StrUct USedLiSt *q,*r,*prer;if((q = malloc(Sizeof(StrUct USedLiSt))) == NULL){printf("\nNot enoUgh to allocate for the USed node .");errorMeSSage();}q -> StartAddreSS = StartAddreSS;q -> jobID = id;prer = *USed;r = (*USed) -> next;while(r && r->StartAddreSS < StartAddreSS){prer = r;r = r -> next;}q -> next = prer -> next;prer -> next = q;}int finiShJob(StrUct USedLiSt **USed,int id,int *StartAddreSS)/* 结束一个作业号为id 的作业,释放存储空间(由*startAddress 返回空间的起始地址) */ {struct usedList *p,*prep;prep = *used;p = prep -> next;while(p && p -> jobID != id){prep = p; p = p -> next;}if(p == NULL){ printf("\nThe job which id is : %d is not in the memory !",id); return 0;}else{ *startAddress = p->startAddress; prep -> next = p -> next; free(p); return 1;}}void insertFreeNode(struct freeList **empty,int startAddress,int size)/* 插入回收的空节点分区,处理回收分区与空闲分区的四种邻接关系。