public String getLineNum(){return this.trainNum;} public String getStartCity(){return this.startCity;} public String getToCity(){return this.toCity;} public String getDate(){return this.date;} public String getStartTime(){return this.startTime;} public String getToTime(){return this.toTime;} public int getSeatAmount(){return this.seatAmount;} public double getTicketPrice(){return this.ticketPrice;}
}class Users extends Line { private String userName; //用户姓名 private int seatNum; //车票座位号 private Scanner input = new Scanner(System.in); Querying qy = new Querying(); //Booking bk = new Booking();
public Users(){ super(); }
public String getUserName(){ return this.userName; } public int getSeatNum(){ return this.seatNum; } public void inputMenuChoice(int choice){ System.out.print("请选择操作: "); choice = input.nextInt(); } public void inputName(String name){ System.out.print("输入姓名: "); name = input.nextLine(); } public void inputStartCity(String Startcity){ System.out.print("输入起点: "); startCity = input.nextLine(); } public void inputToCity(String toCity){ System.out.print("输入终点: "); toCity = input.nextLine(); } }class Terminal{ private static int linesAmount = 0; //路线数量 private static ArrayList<Line> lines = new ArrayList<Line>(linesAmount + 1); private static int usersAmount = 0; //用户数量 private static ArrayList<Users> users = new ArrayList<Users>(usersAmount + 1);
public int getLineAmount(){return linesAmount;} public ArrayList<Line> getLines(){return lines;} public int getUsersAmount(){return usersAmount;} public ArrayList<Users> getUsers(){return users;}
public int confirmName(String name, int index){ if(users.get(index).getUserName().compareTo(name) == 0){ return index; } return -1; }
public int confirmSTcity(String startCity, String toCity,int index){ if(lines.get(index).getStartCity().compareTo(startCity) == 0 && lines.get(index).getToCity().compareTo(toCity) ==0){ return index; } return -1; }
class Querying{ //查询 private BookingSystem bs = new BookingSystem(); private Users us = new Users(); private QueryPage qp = new QueryPage(); private QueryTotalLinesInfo qtLI = new QueryTotalLinesInfo(); private QueryLineInfoByCity qLIBC = new QueryLineInfoByCity(); private QueryTicketInfoByUser qLIOU = new QueryTicketInfoByUser(); private int queryChoice;
public Querying(){}
public void querying(){ qp.showQueryPage(); while(true){ us.inputMenuChoice(queryChoice); switch(queryChoice){ case 1: qtLI.getTotalLinesInfo(); qp.showQueryPage(); break; case 2: qLIBC.queryLineInfoByCity(); qp.showQueryPage(); break; case 3: qLIOU.queryTicketInfoByUser(); qp.showQueryPage(); break; default: bs.startFromHere(); qp.showQueryPage(); break; } } } }class QueryTotalLinesInfo extends Terminal{ private Terminal tm = new Terminal();
public QueryTotalLinesInfo(){ }
public void getTotalLinesInfo(){ System.out.println( " ***全部路线信息如下***"); tm.printLineHead(); for(int index = 0; index < tm.getLineAmount(); index++){ tm.printLineWithIndex(index); } System.out.println(); } }class QueryLineInfoByCity extends Terminal{ private Terminal tm = new Terminal(); private Users us = new Users(); private QueryPage qp = new QueryPage();
public String getLineNum(){return this.trainNum;} public String getStartCity(){return this.startCity;} public String getToCity(){return this.toCity;} public String getDate(){return this.date;} public String getStartTime(){return this.startTime;} public String getToTime(){return this.toTime;} public int getSeatAmount(){return this.seatAmount;} public double getTicketPrice(){return this.ticketPrice;}
}class Users extends Line { private String userName; //用户姓名 private int seatNum; //车票座位号 private Scanner input = new Scanner(System.in); Querying qy = new Querying(); //Booking bk = new Booking();
public Users(){ super(); }
public String getUserName(){ return this.userName; } public int getSeatNum(){ return this.seatNum; } public void inputMenuChoice(int choice){ System.out.print("请选择操作: "); choice = input.nextInt(); } public void inputName(String name){ System.out.print("输入姓名: "); name = input.nextLine(); } public void inputStartCity(String Startcity){ System.out.print("输入起点: "); startCity = input.nextLine(); } public void inputToCity(String toCity){ System.out.print("输入终点: "); toCity = input.nextLine(); } }class Terminal{ private static int linesAmount = 0; //路线数量 private static ArrayList<Line> lines = new ArrayList<Line>(linesAmount + 1); private static int usersAmount = 0; //用户数量 private static ArrayList<Users> users = new ArrayList<Users>(usersAmount + 1);
public int getLineAmount(){return linesAmount;} public ArrayList<Line> getLines(){return lines;} public int getUsersAmount(){return usersAmount;} public ArrayList<Users> getUsers(){return users;}
public int confirmName(String name, int index){ if(users.get(index).getUserName().compareTo(name) == 0){ return index; } return -1; }
public int confirmSTcity(String startCity, String toCity,int index){ if(lines.get(index).getStartCity().compareTo(startCity) == 0 && lines.get(index).getToCity().compareTo(toCity) ==0){ return index; } return -1; }
class Querying{ //查询 private BookingSystem bs = new BookingSystem(); private Users us = new Users(); private QueryPage qp = new QueryPage(); private QueryTotalLinesInfo qtLI = new QueryTotalLinesInfo(); private QueryLineInfoByCity qLIBC = new QueryLineInfoByCity(); private QueryTicketInfoByUser qLIOU = new QueryTicketInfoByUser(); private int queryChoice;
public Querying(){}
public void querying(){ qp.showQueryPage(); while(true){ us.inputMenuChoice(queryChoice); switch(queryChoice){ case 1: qtLI.getTotalLinesInfo(); qp.showQueryPage(); break; case 2: qLIBC.queryLineInfoByCity(); qp.showQueryPage(); break; case 3: qLIOU.queryTicketInfoByUser(); qp.showQueryPage(); break; default: bs.startFromHere(); qp.showQueryPage(); break; } } } }class QueryTotalLinesInfo extends Terminal{ private Terminal tm = new Terminal();
public QueryTotalLinesInfo(){ }
public void getTotalLinesInfo(){ System.out.println( " ***全部路线信息如下***"); tm.printLineHead(); for(int index = 0; index < tm.getLineAmount(); index++){ tm.printLineWithIndex(index); } System.out.println(); } }class QueryLineInfoByCity extends Terminal{ private Terminal tm = new Terminal(); private Users us = new Users(); private QueryPage qp = new QueryPage();
首先一点,面向对象是会用到很多面向对象的高级特性的,多态、封装、继承这三个核心概念需要大量的编程才能够真正理解,应当先把java的基本功打扎实;
其次一点,强迫自己继承、封装,套用设计模式也是没用的,因为没有真正理解,抛开书本的东西,自己设计的时候就傻了。设计是建立在大量的实践基础之上的。从细节开始,培养复用、面向接口编程、模块化、对象化的编程思维。
等到积累了足够多经验之后,再从宏观角度去思考什么是面向对象。
#include <string.h>
#include <stdlib.h>
/**普通的JavaBean对象
* */
struct UserInfo{
int id;
char *userName;
char *password;
};
/**以Json形式输出对象
* */
void printJsonStr(struct UserInfo *userInfo){
printf("UserInfo{id:%d,userName:%s,password:%s}\n",userInfo->id,userInfo->userName,userInfo->password);
}
/**构造函数
* */
struct UserInfo *newUserInfo(int id,char *userName,char *password){
struct UserInfo *userInfo=(struct UserInfo*)malloc(sizeof(struct UserInfo));
userInfo->id=id;
userInfo->userName=userName;
userInfo->password=password;
return userInfo;
}
/**构造长度为len的字符串
* */
char *newString(int len){
return (char*)malloc(sizeof(char)*len);
}
void javaBeanTest(){
struct UserInfo *userInfo=NULL;
int id;
char *userName=newString(20);
char *password=newString(20);
printf("请输入id:\n");
scanf("%d",&id);
printf("请输入用户名:\n");
scanf("%s",userName);
printf("请输入密码:\n");
scanf("%s",password);
userInfo=newUserInfo(id,userName,password);
printf("您的个人信息:\n");
printJsonStr(userInfo);
}
void main(){
void javaBeanTest();
javaBeanTest();
}另外,利用typedef、typeof、宏替换、函数指针等等,完全可以模拟封装、继承、多态、泛型;只是大部分人错误的以为“看完《谭浩强》就等于学过C语言”。
#include <string.h>
#include <stdlib.h>
/**普通的JavaBean对象
* */
struct UserInfo{
int id;
char *userName;
char *password;
};
/**以Json形式输出对象
* */
void printJsonStr(struct UserInfo *userInfo){
printf("UserInfo{id:%d,userName:%s,password:%s}\n",userInfo->id,userInfo->userName,userInfo->password);
}
/**构造函数
* */
struct UserInfo *newUserInfo(int id,char *userName,char *password){
struct UserInfo *userInfo=(struct UserInfo*)malloc(sizeof(struct UserInfo));
userInfo->id=id;
userInfo->userName=userName;
userInfo->password=password;
return userInfo;
}
/**构造长度为len的字符串
* */
char *newString(int len){
return (char*)malloc(sizeof(char)*len);
}
void javaBeanTest(){
struct UserInfo *userInfo=NULL;
int id;
char *userName=newString(20);
char *password=newString(20);
printf("请输入id:\n");
scanf("%d",&id);
printf("请输入用户名:\n");
scanf("%s",userName);
printf("请输入密码:\n");
scanf("%s",password);
userInfo=newUserInfo(id,userName,password);
printf("您的个人信息:\n");
printJsonStr(userInfo);
}
void main(){
void javaBeanTest();
javaBeanTest();
}另外,利用typedef、typeof、宏替换、函数指针等等,完全可以模拟封装、继承、多态、泛型;只是大部分人错误的以为“看完《谭浩强》就等于学过C语言”。
目前还没有面向对象的概念,看一下下面这个代码(这个是从新写的,第一个别人说完全不是面向对象..): 暂时没有订票,退票不知道写的怎么样...import java.util.*;class Line{
protected String trainNum; //班次
protected String date; //日期
protected String startCity; //起点
protected String toCity; //终点
protected String startTime; //起始时间
protected String toTime; //到达时间
protected int seatAmount; //座位数量
protected double ticketPrice; //票价
public Line(){}
public String getLineNum(){return this.trainNum;}
public String getStartCity(){return this.startCity;}
public String getToCity(){return this.toCity;}
public String getDate(){return this.date;}
public String getStartTime(){return this.startTime;}
public String getToTime(){return this.toTime;}
public int getSeatAmount(){return this.seatAmount;}
public double getTicketPrice(){return this.ticketPrice;}
}class Users extends Line {
private String userName; //用户姓名
private int seatNum; //车票座位号
private Scanner input = new Scanner(System.in);
Querying qy = new Querying();
//Booking bk = new Booking();
public Users(){
super();
}
public String getUserName(){
return this.userName;
}
public int getSeatNum(){
return this.seatNum;
}
public void inputMenuChoice(int choice){
System.out.print("请选择操作: ");
choice = input.nextInt();
}
public void inputName(String name){
System.out.print("输入姓名: ");
name = input.nextLine();
}
public void inputStartCity(String Startcity){
System.out.print("输入起点: ");
startCity = input.nextLine();
}
public void inputToCity(String toCity){
System.out.print("输入终点: ");
toCity = input.nextLine();
}
}class Terminal{
private static int linesAmount = 0; //路线数量
private static ArrayList<Line> lines = new ArrayList<Line>(linesAmount + 1);
private static int usersAmount = 0; //用户数量
private static ArrayList<Users> users = new ArrayList<Users>(usersAmount + 1);
public Terminal(){}
public void creatLine(Line line, String tN,String sC, String tC, String d, String sT, String tT, int sA, double tP){ //创建路线
line.trainNum = tN;
line.startCity = sC;
line.toCity = tC;
line.date = d;
line.startTime = sT;
line.toTime = tT;
line.seatAmount = sA;
line.ticketPrice = tP;
linesAmount++;
lines.add(line);
}
public int getLineAmount(){return linesAmount;}
public ArrayList<Line> getLines(){return lines;}
public int getUsersAmount(){return usersAmount;}
public ArrayList<Users> getUsers(){return users;}
public int confirmName(String name, int index){
if(users.get(index).getUserName().compareTo(name) == 0){
return index;
}
return -1;
}
public int confirmSTcity(String startCity, String toCity,int index){
if(lines.get(index).getStartCity().compareTo(startCity) == 0 &&
lines.get(index).getToCity().compareTo(toCity) ==0){
return index;
}
return -1;
}
public void printLineHead(){
System.out.printf("%10s%9s%14s%14s%10s%10s%7s%11s\n",
"班 次","日 期","始 发 站","终 点 站","始发时间","到达时间","座位量","票 价");
}
public void printTicketHead(){
System.out.printf("%10s%10s%9s%14s%14s%10s%10s%7s%11s\n",
"姓 名","班 次","日 期","始 发 站","终 点 站","始发时间","到达时间","座位号","票 价");
}
public void printLineWithIndex(int i){
System.out.printf(" %-6s%-7s%-10s%-10s%-10s%-9s%-7d%-7.2f\n",
lines.get(i).trainNum,lines.get(i).date,lines.get(i).startCity,lines.get(i).toCity,
lines.get(i).startTime,lines.get(i).toTime,lines.get(i).seatAmount,lines.get(i).ticketPrice);
}
public void printTicketWithIndex(int index){
System.out.printf(" %-7s%-6s%-7s%-10s%-10s%-10s%-9s%-7d%-7.2f\n",
users.get(index).getUserName(),users.get(index).getLineNum(),users.get(index).getDate(),
users.get(index).getStartCity(),users.get(index).getToCity(),users.get(index).getStartTime(),
users.get(index).getToTime(),users.get(index).getSeatNum(),users.get(index).getTicketPrice());
}
}
class QueryPage{
public QueryPage(){
}
public void showQueryPage(){
System.out.println(" *****查询系统***** ");
System.out.println(" 1-----> 全部路线查询");
System.out.println(" 2-----> 起终点查询");
System.out.println(" 3-----> 用户名查询");
System.out.println(" 0-----> 退出");
}
}
class Querying{ //查询
private BookingSystem bs = new BookingSystem();
private Users us = new Users();
private QueryPage qp = new QueryPage();
private QueryTotalLinesInfo qtLI = new QueryTotalLinesInfo();
private QueryLineInfoByCity qLIBC = new QueryLineInfoByCity();
private QueryTicketInfoByUser qLIOU = new QueryTicketInfoByUser();
private int queryChoice;
public Querying(){}
public void querying(){
qp.showQueryPage();
while(true){
us.inputMenuChoice(queryChoice);
switch(queryChoice){
case 1:
qtLI.getTotalLinesInfo();
qp.showQueryPage();
break;
case 2:
qLIBC.queryLineInfoByCity();
qp.showQueryPage();
break;
case 3:
qLIOU.queryTicketInfoByUser();
qp.showQueryPage();
break;
default:
bs.startFromHere();
qp.showQueryPage();
break;
}
}
}
}class QueryTotalLinesInfo extends Terminal{
private Terminal tm = new Terminal();
public QueryTotalLinesInfo(){
}
public void getTotalLinesInfo(){
System.out.println( " ***全部路线信息如下***");
tm.printLineHead();
for(int index = 0; index < tm.getLineAmount(); index++){
tm.printLineWithIndex(index);
}
System.out.println();
}
}class QueryLineInfoByCity extends Terminal{
private Terminal tm = new Terminal();
private Users us = new Users();
private QueryPage qp = new QueryPage();
public QueryLineInfoByCity(){
}
public void queryLineInfoByCity(){
String startCity = null;
us.inputName(startCity);
String toCity = null;
us.inputToCity(toCity);
System.out.println(" ***路线 " + startCity + " 至 " + toCity + " 信息如下***");
for(int index = 0; index < tm.getUsersAmount(); index++){
if(tm.confirmSTcity(startCity, toCity, index) >= 0 ){
tm.printLineHead();
tm.printLineWithIndex(tm.confirmSTcity(startCity, toCity, index));
}
}
qp.showQueryPage();
}
}class QueryTicketInfoByUser extends Terminal{
private Terminal tm = new Terminal();
private Users us = new Users();
public QueryTicketInfoByUser(){
}
public void queryTicketInfoByUser(){
String inputName = null;
us.inputName(inputName);
System.out.println(" ***用户 " + inputName + " 所购车票的信息如下***");
tm.printTicketHead();
for(int index = 0; index < tm.getUsersAmount(); index++){
if(tm.confirmName(inputName, index) >= 0){
tm.printTicketWithIndex(tm.confirmName(inputName, index));
}
}
System.out.println();
}
}public class BookingSystem {
private Terminal tm = new Terminal();
private Users us = new Users();
Querying qy = new Querying();
private int pageChoice;
public BookingSystem(){
}
public void initLines(){
Line line0 = new Line();
Line line1 = new Line();
tm.creatLine(line0, "K000", "Hefei", "Beijing", "12/07", "08:30", "09:30", 50, 34.0);
tm.creatLine(line1, "K111", "Shanghai", "Hefei", "21/07", "09:45", "11:00", 50, 50.5);
}
public void startFromHere(){
String pageString = " *****欢迎来到火车订票系统***** \n"
+ " 1-----> 查询\n"
+ " 2-----> 订票\n"
+ " 3-----> 退票\n"
// + " 4-----> 增加路线\n"
+ " 0-----> 退出\n";
System.out.println(pageString);
while(true){
us.inputMenuChoice(pageChoice);
switch(pageChoice){
case 1:
qy.querying();
break;
case 2:
// us.booking();
break;
case 3:
// us.returning();
break;
// case 4:
// System.out.println(" ***暂未开放***\n");
// Ticket ticket = Ticket.incTicket();
// tk.assignInfoForTicket(ticket);
// break;
case 0:
System.out.println("\n ***谢谢使用***");
System.exit(0);
}
}
}
public static void main(String[] args){
BookingSystem bs = new BookingSystem();
bs.initLines();
bs.startFromHere();
}
}
1、尽快掌握MVC、SSH、Jsp、Ajax之类的流行技术。
2、数据结构与算法不能忽视,大公司必考。
继承HibernateTemplete
继承ActionSupport
继承Juqery的extends:fn
其它基本上是组合、1--N关系,或者生成Spring代理对象等等
二、关于复用:函数就是一种“代码复用”,单从函数的角度来讲,C语言复用性能和Java抗衡,但是后期会学到反射机制、泛型编程这两个强大武器,Java的复用性就远大于C语言了。
三、关于“模块化”:其实C语言也有模块化,只不过更偏向底层,如:
* */
int **initTwoArray(int m,int n){
int i=0,*oneArray='\0',j=0;
int **array=(int **)malloc(m*sizeof(int *));
for(;i<m;i++){
oneArray=(int *)malloc(n*sizeof(int));
for(j=0;j<n;j++){
*(oneArray+j)=0;
}
array[i]=oneArray;
}
return array;
}
而Java呢,一个 new int[m][n]就搞定了,因为Sun已经帮你在底层做了很多事情,你可以直接"利用他的模块"来完成你想要的功能。
四:关于对象化思维,比如毕向东视频里边的“冰箱”的例子,初学的时候我们可能都同意视频里边的写法:public class Fridge {
private String name;public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}
/**
* 冰箱具有“打开”的功能
*/
public void open(){
System.out.println("打开"+name);
}
/**
* 冰箱具有“关闭”的功能
*/
public void close(){
System.out.println("关闭"+name);
}
}但以上写法在实际项目开发中是不合理的,项目开发中一般这么写:public class Fridge {
private String name;public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}
}
/**
*操作冰箱的类,使得数据和操作分离
*
*/
class OperateFridge{
public static void open(Fridge f){
System.out.println("打开"+f.getName());
}
public static void close(Fridge f){
System.out.println("关闭"+f.getName());
}
}进度赶进度吧,关于其他的一些设计思想,遇到了再说。顺便提一下,你现在还处于面向对象的初级阶段,越是学到最后你越会发现,要想透彻的理解Java语言,只有从内存的角度去看Java,单单拥有"面向对象,模块化,代码复用、设计模式"等等是不够的,比如一个经典的面试题,很多人讨论,但很少有人能完全说出来:
创建String和StringBuffer对象,在静态区、堆区、栈区分别创建了什么,各占多少字节?为什么JDK要重写String的hashcode,并把String声明为final?StringBuffer的初始容量大概是多少,又是如何扩充的,扩充之后产生了什么垃圾,如何被回收?
错能详细讲讲吗?
其它基本上是组合、1--N关系,或者生成Spring代理对象等等?
创建String和StringBuffer对象,在静态区、堆区、栈区分别创建了什么,各占多少字节?为什么JDK要重写String的hashcode,并把String声明为final?StringBuffer的初始容量大概是多少,又是如何扩充的,扩充之后产生了什么垃圾,如何被回收?
错能详细讲讲吗?
其它基本上是组合、1--N关系,或者生成Spring代理对象等等?
创建String和StringBuffer对象,在静态区、堆区、栈区分别创建了什么,各占多少字节?为什么JDK要重写String的hashcode,并把String声明为final?StringBuffer的初始容量大概是多少,又是如何扩充的,扩充之后产生了什么垃圾,如何被回收?
#include <string.h>
#include <stdlib.h>
/**普通的JavaBean对象
* */
struct UserInfo{
int id;
char *userName;
char *password;
};
/**以Json形式输出对象
* */
void printJsonStr(struct UserInfo *userInfo){
printf("UserInfo{id:%d,userName:%s,password:%s}\n",userInfo->id,userInfo->userName,userInfo->password);
}
/**构造函数
* */
struct UserInfo *newUserInfo(int id,char *userName,char *password){
struct UserInfo *userInfo=(struct UserInfo*)malloc(sizeof(struct UserInfo));
userInfo->id=id;
userInfo->userName=userName;
userInfo->password=password;
return userInfo;
}
/**构造长度为len的字符串
* */
char *newString(int len){
return (char*)malloc(sizeof(char)*len);
}
void javaBeanTest(){
struct UserInfo *userInfo=NULL;
int id;
char *userName=newString(20);
char *password=newString(20);
printf("请输入id:\n");
scanf("%d",&id);
printf("请输入用户名:\n");
scanf("%s",userName);
printf("请输入密码:\n");
scanf("%s",password);
userInfo=newUserInfo(id,userName,password);
printf("您的个人信息:\n");
printJsonStr(userInfo);
}
void main(){
void javaBeanTest();
javaBeanTest();
}另外,利用typedef、typeof、宏替换、函数指针等等,完全可以模拟封装、继承、多态、泛型;只是大部分人错误的以为“看完《谭浩强》就等于学过C语言”。
目前还没有面向对象的概念,看一下下面这个代码(这个是从新写的,第一个别人说完全不是面向对象..): 暂时没有订票,退票不知道写的怎么样...import java.util.*;class Line{
protected String trainNum; //班次
protected String date; //日期
protected String startCity; //起点
protected String toCity; //终点
protected String startTime; //起始时间
protected String toTime; //到达时间
protected int seatAmount; //座位数量
protected double ticketPrice; //票价
public Line(){}
public String getLineNum(){return this.trainNum;}
public String getStartCity(){return this.startCity;}
public String getToCity(){return this.toCity;}
public String getDate(){return this.date;}
public String getStartTime(){return this.startTime;}
public String getToTime(){return this.toTime;}
public int getSeatAmount(){return this.seatAmount;}
public double getTicketPrice(){return this.ticketPrice;}
}class Users extends Line {
private String userName; //用户姓名
private int seatNum; //车票座位号
private Scanner input = new Scanner(System.in);
Querying qy = new Querying();
//Booking bk = new Booking();
public Users(){
super();
}
public String getUserName(){
return this.userName;
}
public int getSeatNum(){
return this.seatNum;
}
public void inputMenuChoice(int choice){
System.out.print("请选择操作: ");
choice = input.nextInt();
}
public void inputName(String name){
System.out.print("输入姓名: ");
name = input.nextLine();
}
public void inputStartCity(String Startcity){
System.out.print("输入起点: ");
startCity = input.nextLine();
}
public void inputToCity(String toCity){
System.out.print("输入终点: ");
toCity = input.nextLine();
}
}class Terminal{
private static int linesAmount = 0; //路线数量
private static ArrayList<Line> lines = new ArrayList<Line>(linesAmount + 1);
private static int usersAmount = 0; //用户数量
private static ArrayList<Users> users = new ArrayList<Users>(usersAmount + 1);
public Terminal(){}
public void creatLine(Line line, String tN,String sC, String tC, String d, String sT, String tT, int sA, double tP){ //创建路线
line.trainNum = tN;
line.startCity = sC;
line.toCity = tC;
line.date = d;
line.startTime = sT;
line.toTime = tT;
line.seatAmount = sA;
line.ticketPrice = tP;
linesAmount++;
lines.add(line);
}
public int getLineAmount(){return linesAmount;}
public ArrayList<Line> getLines(){return lines;}
public int getUsersAmount(){return usersAmount;}
public ArrayList<Users> getUsers(){return users;}
public int confirmName(String name, int index){
if(users.get(index).getUserName().compareTo(name) == 0){
return index;
}
return -1;
}
public int confirmSTcity(String startCity, String toCity,int index){
if(lines.get(index).getStartCity().compareTo(startCity) == 0 &&
lines.get(index).getToCity().compareTo(toCity) ==0){
return index;
}
return -1;
}
public void printLineHead(){
System.out.printf("%10s%9s%14s%14s%10s%10s%7s%11s\n",
"班 次","日 期","始 发 站","终 点 站","始发时间","到达时间","座位量","票 价");
}
public void printTicketHead(){
System.out.printf("%10s%10s%9s%14s%14s%10s%10s%7s%11s\n",
"姓 名","班 次","日 期","始 发 站","终 点 站","始发时间","到达时间","座位号","票 价");
}
public void printLineWithIndex(int i){
System.out.printf(" %-6s%-7s%-10s%-10s%-10s%-9s%-7d%-7.2f\n",
lines.get(i).trainNum,lines.get(i).date,lines.get(i).startCity,lines.get(i).toCity,
lines.get(i).startTime,lines.get(i).toTime,lines.get(i).seatAmount,lines.get(i).ticketPrice);
}
public void printTicketWithIndex(int index){
System.out.printf(" %-7s%-6s%-7s%-10s%-10s%-10s%-9s%-7d%-7.2f\n",
users.get(index).getUserName(),users.get(index).getLineNum(),users.get(index).getDate(),
users.get(index).getStartCity(),users.get(index).getToCity(),users.get(index).getStartTime(),
users.get(index).getToTime(),users.get(index).getSeatNum(),users.get(index).getTicketPrice());
}
}
class QueryPage{
public QueryPage(){
}
public void showQueryPage(){
System.out.println(" *****查询系统***** ");
System.out.println(" 1-----> 全部路线查询");
System.out.println(" 2-----> 起终点查询");
System.out.println(" 3-----> 用户名查询");
System.out.println(" 0-----> 退出");
}
}
class Querying{ //查询
private BookingSystem bs = new BookingSystem();
private Users us = new Users();
private QueryPage qp = new QueryPage();
private QueryTotalLinesInfo qtLI = new QueryTotalLinesInfo();
private QueryLineInfoByCity qLIBC = new QueryLineInfoByCity();
private QueryTicketInfoByUser qLIOU = new QueryTicketInfoByUser();
private int queryChoice;
public Querying(){}
public void querying(){
qp.showQueryPage();
while(true){
us.inputMenuChoice(queryChoice);
switch(queryChoice){
case 1:
qtLI.getTotalLinesInfo();
qp.showQueryPage();
break;
case 2:
qLIBC.queryLineInfoByCity();
qp.showQueryPage();
break;
case 3:
qLIOU.queryTicketInfoByUser();
qp.showQueryPage();
break;
default:
bs.startFromHere();
qp.showQueryPage();
break;
}
}
}
}class QueryTotalLinesInfo extends Terminal{
private Terminal tm = new Terminal();
public QueryTotalLinesInfo(){
}
public void getTotalLinesInfo(){
System.out.println( " ***全部路线信息如下***");
tm.printLineHead();
for(int index = 0; index < tm.getLineAmount(); index++){
tm.printLineWithIndex(index);
}
System.out.println();
}
}class QueryLineInfoByCity extends Terminal{
private Terminal tm = new Terminal();
private Users us = new Users();
private QueryPage qp = new QueryPage();
public QueryLineInfoByCity(){
}
public void queryLineInfoByCity(){
String startCity = null;
us.inputName(startCity);
String toCity = null;
us.inputToCity(toCity);
System.out.println(" ***路线 " + startCity + " 至 " + toCity + " 信息如下***");
for(int index = 0; index < tm.getUsersAmount(); index++){
if(tm.confirmSTcity(startCity, toCity, index) >= 0 ){
tm.printLineHead();
tm.printLineWithIndex(tm.confirmSTcity(startCity, toCity, index));
}
}
qp.showQueryPage();
}
}class QueryTicketInfoByUser extends Terminal{
private Terminal tm = new Terminal();
private Users us = new Users();
public QueryTicketInfoByUser(){
}
public void queryTicketInfoByUser(){
String inputName = null;
us.inputName(inputName);
System.out.println(" ***用户 " + inputName + " 所购车票的信息如下***");
tm.printTicketHead();
for(int index = 0; index < tm.getUsersAmount(); index++){
if(tm.confirmName(inputName, index) >= 0){
tm.printTicketWithIndex(tm.confirmName(inputName, index));
}
}
System.out.println();
}
}public class BookingSystem {
private Terminal tm = new Terminal();
private Users us = new Users();
Querying qy = new Querying();
private int pageChoice;
public BookingSystem(){
}
public void initLines(){
Line line0 = new Line();
Line line1 = new Line();
tm.creatLine(line0, "K000", "Hefei", "Beijing", "12/07", "08:30", "09:30", 50, 34.0);
tm.creatLine(line1, "K111", "Shanghai", "Hefei", "21/07", "09:45", "11:00", 50, 50.5);
}
public void startFromHere(){
String pageString = " *****欢迎来到火车订票系统***** \n"
+ " 1-----> 查询\n"
+ " 2-----> 订票\n"
+ " 3-----> 退票\n"
// + " 4-----> 增加路线\n"
+ " 0-----> 退出\n";
System.out.println(pageString);
while(true){
us.inputMenuChoice(pageChoice);
switch(pageChoice){
case 1:
qy.querying();
break;
case 2:
// us.booking();
break;
case 3:
// us.returning();
break;
// case 4:
// System.out.println(" ***暂未开放***\n");
// Ticket ticket = Ticket.incTicket();
// tk.assignInfoForTicket(ticket);
// break;
case 0:
System.out.println("\n ***谢谢使用***");
System.exit(0);
}
}
}
public static void main(String[] args){
BookingSystem bs = new BookingSystem();
bs.initLines();
bs.startFromHere();
}
}
这个好像运行不了!!!
#include <string.h>
#include <stdlib.h>
/**普通的JavaBean对象
* */
struct UserInfo{
int id;
char *userName;
char *password;
};
/**以Json形式输出对象
* */
void printJsonStr(struct UserInfo *userInfo){
printf("UserInfo{id:%d,userName:%s,password:%s}\n",userInfo->id,userInfo->userName,userInfo->password);
}
/**构造函数
* */
struct UserInfo *newUserInfo(int id,char *userName,char *password){
struct UserInfo *userInfo=(struct UserInfo*)malloc(sizeof(struct UserInfo));
userInfo->id=id;
userInfo->userName=userName;
userInfo->password=password;
return userInfo;
}
/**构造长度为len的字符串
* */
char *newString(int len){
return (char*)malloc(sizeof(char)*len);
}
void javaBeanTest(){
struct UserInfo *userInfo=NULL;
int id;
char *userName=newString(20);
char *password=newString(20);
printf("请输入id:\n");
scanf("%d",&id);
printf("请输入用户名:\n");
scanf("%s",userName);
printf("请输入密码:\n");
scanf("%s",password);
userInfo=newUserInfo(id,userName,password);
printf("您的个人信息:\n");
printJsonStr(userInfo);
}
void main(){
void javaBeanTest();
javaBeanTest();
}另外,利用typedef、typeof、宏替换、函数指针等等,完全可以模拟封装、继承、多态、泛型;只是大部分人错误的以为“看完《谭浩强》就等于学过C语言”。
有个疑问,malloc函数使用后,是否需要在javaBeanTest()里的最后边做free操作?不free会内存泄漏的吧?