一、课程设计目的
本课程设计是利用Java进行程序设计的一个关键实践环节。它是根据教学计划的要求,在教师的指导下,对学生实施程序设计训练的必要过程,是对前期课堂教学效果的检验。其目标在于培养学生综合运用面向对象的方法完成小型软件系统的分析与设计,熟练使用Java语言及JavaSE类库完成桌面应用软件的开发和调试。通过这个课程设计,要求学生能够遵循软件开发过程的基本规范,按照课程设计的题目要求,独立地完成设计、编写、调试和测试应用程序及编写文档的任务。
二、课程设计任务
通讯录:
制作一个通讯录程序,功能要求:
- 自定义数据库文件格式。
- 提供输入、显示、查找、添加、删除、插入、保存、读入、拷贝、排序等功能。
三、需求分析
所选择的课题进行需求分析,详细描述所要实现的功能
需要实现的功能如下:
1.系统可以使用命令退出
2.信息的查询:可以让用户选择是否继续查询,或随时结束
3.信息的添加
4.信息的删除:当用户输入未在通讯录中的人时提示用户重新输入
5.信息的修改
6.信息的显示
7.信息的拷贝:提示用户要存放及查看的位置
8.返回主菜单:每项功能的使用完成后能够返回主菜单选择其他功能
四、系统设计
系统模块划分,描述类与类之间的关系
先考虑到通讯录的内容为:姓名与电话,所以建立联系人实体类Contact
再考虑到系统功能为数据的增删改查,所以定义了访问数据的类Text
然后采用类MainMenu实现界面上显示
五、系统实现
程序设计,核心模块实现技术的说明
增添模块:
删除模块:
修改模块:
查询模块:
文件操作读写方法:
界面跳转方法:
GoView()
六、总结
我的课程设计的基于Java的通讯录系统。在一个月的课程时间里,通过不断的查找资料,调试代码和同学的帮助,完成了指定的系统的功能。通过这次课程设计,我加深了对Java程序的理解,熟练掌握了类的封装等,并且能把它们运用到实际的程序中去。
通过这次课程设计,我收获的不仅仅是课程上的知识得到实际应用,还有编程的基本习惯和开发系统时应注意的流程。
附录:
程序代码(主要模块)
package task;
import java.util.Scanner;
public class MainMenu {
private Menu contact;
private static Scanner scanner;
public MainMenu() {
contact=new Menu();
System.out.println("*************************");
contact.AddMenuBar("***查询联系人请按0!***");
contact.AddMenuBar("***添加联系人请按1!***");
contact.AddMenuBar("***删除联系人请按2!***");
contact.AddMenuBar("***修改联系人请按3!***");
contact.AddMenuBar("显示所有联系人信息请按4!");
contact.AddMenuBar("拷贝所有联系人信息请按5!");
contact.PrintMenuBar();
System.out.println("*************************");
System.out.println("请选择功能(0-5):");
while(GoView.Menu()==0);
}
public static void main(String args[]) {
int judge=0;
while(judge==0){
new MainMenu();
System.out.println("返回请按0");
scanner = new Scanner(System.in);
judge=Integer.valueOf(scanner.nextLine());
}
}
}
package task;
import java.util.Scanner;
public class Add {
private Menu addView;
private Text xx;
private Contact contact;
private Occur Occur;
public Add() {
xx=new Text();
contact=new Contact();
Occur=new Occur();
Scanner a=new Scanner(System.in);
System.out.println("请输入客户姓名:");
contact.setName(a.nextLine());
System.out.println("请输入客户电话号码:");
contact.setTelephone(a.nextLine());
xx.AddInfor(contact);
}
public Menu getAddView() {
return addView;
}
public void setAddView(Menu addView) {
this.addView = addView;
}
public Text getxx() {
return xx;
}
public void setxx(Text xx) {
this.xx = xx;
}
public Contact getContact() {
return contact;
}
public void setContact(Contact contact) {
this.contact = contact;
}
public Occur getOccur() {
return Occur;
}
public void setGenerated(Occur Occur) {
this.Occur = Occur;
}
public static void main(String atg[]){
new Add();
}
}
package task;
import java.util.List;
public class Array {
public Array() {
// TODO 自动生成的构造函数存根
}
public static String[] getOfCustomerInfor(List <Contact>list){
String arg[]=new String[list.size()];
arg[0]="联系人姓名 联系人电话";
for(int i=1;i<list.size();i++)
{
arg[i]=list.get(i).getName()+" "+list.get(i).getTelephone();
}
return arg;
}
public static String getInfor(Contact contact){
String arg=new String();
arg=contact.getName()+" "+contact.getTelephone();
return arg;
}
public static String getofString(List <String>list){
String arg[]=new String[list.size()];
String sum=new String();
for(int i=0;i<list.size();i++)
{
String temp=i+":"+list.get(i)+"\n";
sum+=temp;
}
return sum;
}
}
package task;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Text {
private Occur Occur;
public Text() {
// TODO 自动生成的构造函数存根
Occur=new Occur();
}
public void AddInfor(Contact contact){
System.out.println(Array.getInfor(contact));
String temp=Array.getInfor(contact);
writeLineFile("src/1.txt",temp);
}
public void writeLineFile(String filename, String content){
try {
FileWriter fileWriter=new FileWriter(filename,true);
BufferedWriter bufWrite = new BufferedWriter(fileWriter);
bufWrite.write(content+"\r\n");
bufWrite.close();
fileWriter.close();
System.out.println("录入成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("读取" + filename + "错误!");
}
}
public void writeallLine(String filename, String []content){
try {
FileWriter fileWriter=new FileWriter(filename);
BufferedWriter bufWrite = new BufferedWriter(fileWriter);
for (int i = 0; i < content.length; i++) {
bufWrite.write(content[i]+"\r\n");
}
bufWrite.close();
fileWriter.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("读取" + filename + "错误!");
}
}
public Occur getOccur() {
return Occur;
}
public void setOccur(Occur Occur) {
this.Occur = Occur;
}
public void DeleteInfor(){
while(DeleteByName()==0);
}
private int DeleteByName(){
Scanner sc = new Scanner(System.in);
String judge=new String();
judge=sc.nextLine();
String Name=new String();
List <Contact> pl=Occur.getContacts();
for(Object temp:pl){
Contact p =(Contact)temp;
if (judge.equals(p.getName())){
Name=judge;
judge="1";
}
}
if(!judge.equals("1")){
System.out.println("未找到此人无法删除,请重新输出姓名"+"\n请输入姓名:");
return 0;
}
System.out.println(Name);
List <Contact> ple=Occur.getContacts();
List del =new ArrayList<>();
int tep=ple.size();
for(Object temp:ple){
Contact p =(Contact)temp;
if (Name.equals(p.getName())){
del.add(p);
}
}
ple.removeAll(del);
if(ple.size()!=tep)
{
System.out.println("删除成功");
}
else{
System.out.println("删除失败");
return 0;
}
writeallLine("src/1.txt", Array.getOfCustomerInfor(ple));
return 0;
}
public void SearchName(){
while(MainSearchByName()==null);
}
public String MainSearchByName(){
Scanner sc = new Scanner(System.in);
String judge=sc.nextLine();
List <Contact> ple=Occur.getContacts();
for(Object temp:ple){
Contact p =(Contact)temp;
if (judge.equals(p.getName())){
Occur.Format(p);
return judge;
}
}
System.out.println("未找到此人,请重新输入!");
return null;
}
public String SearchAll(){
List <Contact> ple=Occur.getContacts();
for(Object temp:ple){
Contact p =(Contact)temp;
Occur.FormatMain(p);
}
return null;
}
public void Update(){
while(UpdateByName()==0);
}
private int UpdateByName(){
Scanner sc = new Scanner(System.in);
String judge=new String();
judge=sc.nextLine();
String Name=new String();
List <Contact> pl=Occur.getContacts();
for(Object temp:pl){
Contact p =(Contact)temp;
if (judge.equals(p.getName())){
Name=judge;
judge="1";
}
}
if(!judge.equals("1")){
System.out.println("未找到此人无法修改,请重新输出姓名"+"\n请输入姓名:");
return 0;
}
List <Contact> ple=Occur.getContacts();
List del =new ArrayList<>();
int tep=ple.size();
for(Object temp:ple){
Contact p =(Contact)temp;
if (Name.equals(p.getName())){
del.add(p);
}
}
ple.removeAll(del);
if(tep!=ple.size()){
System.out.println("请输入新的用户信息:");
writeallLine("src/1.txt", Array.getOfCustomerInfor(ple));
new Add();
return 1;
}
System.out.println("未找到该用户,请重新输入!");
return 0;
}
}
package task;
import java.util.Scanner;
public class Delete {
private Text xx;
private Scanner scanner;
public Delete() {
// TODO 自动生成的构造函数存根
xx=new Text();
int judge=1;
scanner = new Scanner(System.in);
while(judge==1){
System.out.println("请输入要删除的联系人的姓名"+"\n请输入姓名:");
xx.DeleteInfor();
System.out.println("是否确认删除联系人,继续删除输入1,否则任意键结束查询");
judge=Integer.valueOf(scanner.nextLine());
xx=new Text();
}
}
public static void main(String arg[]){
new Delete();
}
}
package task;
import java.util.Scanner;
public class Search {
private Text xx;
private Scanner scanner;
public Search() {
// TODO 自动生成的构造函数存根
int judge=1;
scanner = new Scanner(System.in);
xx=new Text();
while(judge==1){
System.out.println("请输入联系人姓名:");
xx.SearchName();
System.out.println("是否要继续查询,继续请按1,退出请按任意键");
judge=Integer.valueOf(scanner.nextLine());
}
}
public static void main(String arg[]){
new Search();
}
}
package task;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.List;
public class Occur {
private List<Contact> contacts;
public Occur() {
contacts=new ArrayList<Contact>();
this.readFileByLinesCustomerInfor("src/1.txt", contacts);
}
public List<Contact> getContacts() {
return contacts;
}
public void setContacts(List<Contact> contacts) {
this.contacts = contacts;
}
public List<Contact> readFileByLinesCustomerInfor(String fileName,List <Contact>list) {
File file = new File(fileName);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
while ((tempString = reader.readLine()) != null) {
list.add(GetInfor(tempString));
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
if(list!=null)
return list;
return null;
}
public static Contact GetInfor(String tempString){
String []temp=tempString.split(" ");
Contact employee=new Contact();
if(!temp[0].equals("客户姓名")){
employee.setName(temp[0]);
employee.setTelephone(temp[0]);
}
return employee;
}
public static void Format(Contact contact){
if(contact.getName()!=null){
System.out.println("客户姓名:"+contact.getName());
System.out.println("客户电话:"+contact.getTelephone()+"\n");
}
}
public static void FormatMain(Contact contact){
if(contact.getName()!=null){
System.out.println("客户姓名:"+contact.getName());
}
}
public static void main(String args[]) throws IOException, Exception{
List list=new ArrayList<>();
Occur OccurtAccount=new Occur();
for(int i=0;i<OccurtAccount.getContacts().size();i++){
Format(OccurtAccount.getContacts().get(i));
}
}
}
package task;
public class GetAll {
private Text xx;
public GetAll() {
// TODO 自动生成的构造函数存根
xx=new Text();
xx.SearchAll();
}
public static void main(String args[]){
GetAll allContacts=new GetAll();
}
}
package task;
import java.util.Scanner;
public class GoView {
private static Scanner aa;
public static int Menu(){
aa = new Scanner(System.in);
String judge=aa.nextLine();
if(judge.equals("0")){
new Search();
return 1;
}
if(judge.equals("1")){
new Add();
return 1;
}
if(judge.equals("2")){
new Delete();
return 1;
}
if(judge.equals("3")){
new Change();
return 1;
}
if(judge.equals("4")){
new GetAll();
return 1;
}
if(judge.equals("5")){
new Copy();
return 1;
}
return 0;
}
}
package task;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Copy {
public Copy() {
System.out.println("请输入要存放的位置以及名字");
Scanner aa=new Scanner(System.in);
String judge=aa.nextLine();
CopyTo(judge);
}
public void CopyTo(String string){
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis = new FileInputStream("src/1.txt");
fos = new FileOutputStream(string,true);
byte[] words=new byte[1024];
while((fis.read())!=-1){
fis.read(words);
fos.write(words, 0, words.length);
}
System.out.println("复制成功。请往"+string+"查看");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(fos!=null)
fos.close();
if(fis!=null)
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package task;
import java.util.ArrayList;
import java.util.List;
public class Menu {
private List <String>MenuBar;
public Menu() {
MenuBar=new ArrayList<String>();
}
public void AddMenuBar(String Menubar){
MenuBar.add(Menubar);
}
public void PrintMenuBar(){
System.out.println(Array.getofString(MenuBar));
}
}
package task;
public class Change {
private Text xx;
public Change() {
xx=new Text();
System.out.println("请输入要修改的的姓名"+"\n请输入客户姓名:");
xx.Update();
}
public static void main(String arg[]){
new Change();
}
}