一、課程設計目的
本課程設計是利用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();
}
}