一、引言
加深对《Java2面向对象程序设计》课程所学知识的理解,进一步巩固 Java语言的语法规则。分析系统的可行性,让系统有一个明确的方向,使开发更具合理性,并能分析出系统的具体流程,为后面的开发做好铺垫。明确本次课程设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JAVA的应用系统综合实例,来掌握Java语言编程技巧。并学会编制结构清晰、风格良好的、数据结构适当的Java语言程序,从而具备解决综合性实际问题的能力
二、课题内容
用Java设计一个职工信息管理系统,并实现相关功能。
三、系统程序要求
1、设计一个职工信息管理系统
2、要求包括职工信息包括职工号、姓名、性别、年龄、学历、工资、
住 址、电话(职工号不重复)
3、本系统功能描述:
职工信息录入功能(职工信息用文本保存);
职工信息浏览功能;
查询功能(至少一种查询方式):
按工资查询, 按学历查询
4、职工信息删除、修改功能(这两个功能任选)。
四、程序设计思想
该课题要求是输入职工信息,对职工信息进行一系列的处理。既要输入工号又要能查找到与之对应的职工,还要对实现建立,显示,查找,删除,信息的保存。
因为考虑到信息管理信息的实用性,我额外添加了一个“读文件”功能,使利用void read方法来实现的。这个“读文件模块"!是我用来扩充信息管理系统功能的!可以使系统在用户不用输入信息就能读取先前已存在的职工信息文件。
根据课题要求,我是这样设计的:首先对要实现的功能类型分为三大类——Public类、方法类、信息类;然后细分为六个方法——void caidan、void creat、void output、void search、void delete、void read 。这些类和方法构成了能够实现不同功能的模块,很好地体现了面向对象的Java语言的编程模块块的思想。
我通过调用各功能模块的几个方法,随后在各个method中具体实现相关的功能。当然要利用throws IOException进行一些异常处理,包括输入异常和数据的异常。在数据的录入与输出的过程中涉及到文件的相关操作(包括打开与关闭等)最后是系统的安全退出。大部分功能都是在具体的模块中加以实现的。
如search方法实现查询职工信息功能;caidan方法实现系统选择菜单界面的输出等相关功能;delete方法用于职工信息删除;output方法用于职工信息的输出及浏览等系列功能。
五、程序源代码及其解析
package staff;//包
import java.io.*;
public class StaffInfomation {
public static void main(final String args) throws IOException
//throws IOException用来抛出io的错误,文件读写错误, 主要涉及到java的安全机制
{
staffInfo staffOne=new staffInfo[100]; //定义100个类数组
for(int j=0;j<100;j++) staffOne[j] = new staffInfo;
//建立这100个类的对象
final ways staffTwo=new ways; //建立这个方法类的对象
staffTwo.caidan(staffOne);
staffTwo.creat(staffOne);
staffTwo.output(staffOne);
staffTwo.search(staffOne);
staffTwo.delete(staffOne);
//以上几个方法分别对应着:caidan菜单选择、增加(建立)职工信息、输出(预览)、查询、删除这些功能,以数组类为参数
}
}
class staffInfo
//职工信息类换句话说就相当与c语言里面的结构体,存放职工的信息
{
public String name;
public String num;
public String sex;
public String age;
public String record;
public String position;
public String wanges;
public String tel;
public String addr;
//把name、num、sex、age、record等声明为全局变量,因为它们贯穿于整个程序中,方便其它方法、类调用它们
}
class ways //方法类,主要实现职工信息的建立,显示,查找,删除,信息的保存与读取;这个类是整个程序的操作类。
{
public String recordkey;
public int i=0;//i用来存放职工的人数
public String filename="Infomation.txt";
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
//此处是JAVA语言中输入数据的基本格式,功能有如C中的scanf函数
void caidan(staffInfo staffOne) throws IOException
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
// 参看书34页,产生Buf对象;buf是BufferedReader类的变量,此处将读入字符串至buf
int choice;
do{
System.out.println("☆★☆★☆★☆★电子信息系40706班★贺 雪 设计★☆★☆★☆\n\n");
System.out.println("┏━━━━━━━━━━━━━━━━━━┓");
System.out.println("┃★ 职工管理系统主菜单界面 ★┃");
System.out.println("┣━━━━━━━━━━━━━━━━━━┫");
System.out.println("┃ ★ ①.输入职工信息 ★ ┃");
System.out.println("┃ ★ ②.预览职工信息 ★ ┃");
System.out.println("┃ ★ ③.查找职工信息 ★ ┃");
System.out.println("┃ ★ ④.删除职工信息 ★ ┃");
System.out.println("┃ ★ ⑤.安全退出系统 ★ ┃");
System.out.println("┃ ★ ⑥.读取数据 ★ ┃");
System.out.println("┗━━━━━━━━━━━━━━━━━━┛");
System.out.print(" 请输入您的选择(0--6):");
choice=Integer.parseInt(buf.readLine);
switch(choice)
{
case 1:creat(staffOne);break;
case 2:output(staffOne);break;
case 3:search(staffOne);break;
case 4:delete(staffOne);break;
case 5:save(staffOne);break;
case 6:read(staffOne);break;
}
}while(choice!=0);
}
void creat(staffInfo staffOne) throws IOException
//这个方法是实现“增加(建立)职工信息”;是建立信息模块
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.print("\n请输入职工信息(以0结束)\n");
System.out.print("姓名:\n\n");
staffOne[i].name=buf.readLine;
while(staffOne[i].name.compareTo("0")!=0)
//用数组staffOne[i]来暂存职工的序 号,并用compareTo方 法确定判定是否应该写入新信息
{
System.out.print("工号:\n\n");
staffOne[i].num=buf.readLine;
System.out.print("性别:\n\n");
staffOne[i].sex=buf.readLine;
System.out.print("年龄:\n\n");
staffOne[i].age=buf.readLine;
System.out.print("学历:\n\n");
staffOne[i].record=buf.readLine;
System.out.print("职位:\n\n");
staffOne[i].position=buf.readLine;
System.out.print("工资:\n\n");
staffOne[i].wanges=buf.readLine;
System.out.print("电话:\n\n");
staffOne[i].tel=buf.readLine;
System.out.print("住址:\n\n");
staffOne[i].addr=buf.readLine;
i++;
System.out.println("请输入下一个职工信息:\n\n");
staffOne[i].name=buf.readLine;
}
}
void output(staffInfo staffOne) throws IOException
//这里是实现“输出(预览)职工信息”output的模块
{
System.out.println("--------------------------------------");
System.out.println(" *员工信息表* );
System.out.println("------------------------------------");
System.out.println("姓名 工号 性别 年龄 学历 职位 工资 电话号码 住址");
System.out.println("---------------------------------");
if(i!=0)
{
for(int j=0;j<i;j++)
{
System.out.print(staffOne[j].name+" "+staffOne[j].num+" "+staffOne[j].sex+" ");
System.out.print(staffOne[j].age+" "+staffOne[j].record+" "+staffOne[j].position+" ");
System.out.print(staffOne[j].wanges+" "+staffOne[j].tel+" "+staffOne[j].addr+"\n");
}
System.out.println("------------------------------");
}
else System.out.println("没有员工信息!");
}
void search(staffInfo staffOne) throws IOException
//这里是实现职工信息的查询功能的模块
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n请输入您要查找的职工学历:");
recordkey=buf.readLine;
boolean flg=true;
System.out.println("------------------------------------");
System.out.println(" *员工信息表* );
System.out.println("-----------------------------------");
System.out.println("姓名 工号 性别 年龄 学历 职位 工资 电话号码 住址");
System.out.println("---------------------------------------");
for(int j=0;j<i;j++)
{
if(recordkey.equals(staffOne[j].record))
//equals是字符串比较函数相等返回true
{
System.out.print(staffOne[j].name+" "+staffOne[j].num+" "+staffOne[j].sex+" ");
System.out.print(staffOne[j].age+" "+staffOne[j].record+" "+staffOne[j].position+" ");
System.out.print(staffOne[j].wanges+" "+staffOne[j].tel+" "+staffOne[j].addr+"\n");
flg=false;
}
}
if(flg)
System.out.println("对不起,查无此人!");
}
void delete(staffInfo staffOne) throws IOException
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n请输入您要删除的职工姓名:");
recordkey=buf.readLine;
boolean flg=true;
for(int j=0;j<i;j++)
{
//System.out.println("staffOne[j].name="+staffOne[j].name);
//System.out.println("recordkey="+recordkey);
//System.out.println("recordkey.equals(staffOne[j].name)="+recordkey.equals(staffOne[j].name));
if(recordkey.equals(staffOne[j].name))
{
for(int k=j;k<=i-1;k++)
//利用顺序表的删除算法,删除值之后,再把后面的值往前移位,从而实现删除
{
staffOne[k].name=staffOne[k+1].name ;
staffOne[k].num=staffOne[k+1].num ;
staffOne[k].sex=staffOne[k+1].sex ;
staffOne[k].age=staffOne[k+1].age ;
staffOne[k].record=staffOne[k+1].record ;
staffOne[k].position=staffOne[k+1].position ;
staffOne[k].wanges=staffOne[k+1].wanges ;
staffOne[k].tel=staffOne[k+1].tel ;
staffOne[k].addr=staffOne[k+1].addr ;
}
i--;//职工人数要减一
flg=false;
}
}
if(flg)
System.out.println("对不起,查无此人!。");
else System.out.println("已经删除!。");
}
void save(staffInfo staffOne) throws IOException
//数据的保存模块, 把输入的职工信息保存到相应的文件里。
{
int k;
final FileWriter fw=new FileWriter(filename);
//调用构造函数FileWriter创建FileWriter类的对象。
//文件的读取(书216页13-2-2)
fw.write( i+"\n");//把职工的人数保存到文件中以便下次读取是使用
for( k=0;k<i;k++)//每个职工有9个信息字段,下面就是这9个信息段。
{
fw.write( staffOne[k].name+"\n");
fw.write( staffOne[k].num+"\n");
fw.write( staffOne[k].sex+"\n" );
fw.write( staffOne[k].age+"\n");
fw.write( staffOne[k].record+"\n");
fw.write( staffOne[k].position+"\n") ;
fw.write( staffOne[k].wanges+"\n");
fw.write( staffOne[k].tel+"\n");
fw.write( staffOne[k].addr+"\n");
}
fw.close;
System.out.println("\n 系统已经安全退出!感谢您的使用!");
System.exit(0);
}
void read(staffInfo staffOne) throws IOException
//这是程序的“读文件模块"!是我自己添加进去扩充系统功能的!可以使系统不用输入信息就能读取先前已存在的职工信息文件。
{
final FileReader fr=new FileReader(filename);
final BufferedReader bfr=new BufferedReader(fr);
//关于文件的读取不会的看看书216页13-2-2
if((recordkey=bfr.readLine)!=null)
i=Integer.parseInt(recordkey);
for(int j=0;j<i;j++)
{
staffOne[j].name=bfr.readLine; 这是程序的“读文件模块",
是我自己添加进去扩充系统功
staffOne[j].num=bfr.readLine; 能的!可以使系统不用输入信息
就能读取先前已存在的职工信息
staffOne[j].sex=bfr.readLine; 文件,从中读取数据。利用了书
本P216页13-2-2的文件相关知识
staffOne[j].age=bfr.readLine;
staffOne[j].record=bfr.readLine;
staffOne[j].position=bfr.readLine ;
staffOne[j].wanges=bfr.readLine;
staffOne[j].tel=bfr.readLine;
staffOne[j].addr=bfr.readLine;
}
fr.close;
System.out.println("\n 数据已经成功读取!");
}
}
六、心得体会
我自己感觉此次课程设计做得挺成功的,通过这一次,我学到了不少实际编程的知识。
在这次设计开始的第一天开始,我就开始着手修改一个用“职工信息管理系统”的JAVA程序。这一过程太不顺利,调试的时候都没有成功。后来我请教一个学长,在他的指导下我不断的发现错误,并改正它们,功夫不负有心人人,我的程序最后运行成功了。
这其中了不少的东西,磨砺了我的意志;同时还巩固了以前所学的知识,学到了不少书本上没有的知识;学到了很多java编程知识,并学会了简单的使用eclipse来开发java程序的一些使用技巧这次课程设计是对我本学期所学的知识的检验,由此我发现了不少的问题。可以说它给了我一次自我评估的机会。通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。
临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美,但我以后会多向老师请教,自己也要加强对Java 的学习。努力进一步提高自己的编程水平。
参考资料
1、《程序天下》
2、洪维恩、何嘉《java2面向对象程序设计》
3、Java天下-java、jsp编程论坛[黑咖啡屋]
4、黄旭等《java课程设计指导》
5、C编程设计(第三版) 谭浩强(著)
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务