获赞
1.7W
粉丝
2943
关注
396
看过 TA
6394
中国传媒大学
2018
运营
IP属地:北京
有问题请找社区小助手,此号暂停使用
私信
关注
2018-07-09 13:21
已编辑
社区规范更新号
Java方向活动帖:【牛客带你学编程】【Java方向】0基础小白入门培养计划!   牛客带你学编程活动总贴:【牛客带你学编程】0基础小白入门培养计划!           Java项目练习:第10期   练习时间:6月15日-6月29日(2周) 活动规则:     每一期一个项目,届时会开新帖发布   学员直接将答案提交到该贴评论区即可   两周后,公布导师参考答案   导师评选出当期最佳代码(将被设置为精彩回复)        奖励:牛客大礼包一份(牛客定制水杯 牛客定制笔 牛客定制程序员徽章 滑稽抱枕)   参与方式:直接将你的代码回复到本帖评论区 ...
DNCBA-曹:==============实体类================= package com.newcoder_10; import java.io.Serializable; public class Student implements Serializable { /** * 实体类: */ private static final long serialVersionUID = 4888503192302777566L; private String id; // 学号字段 private String name; // 名称 private String age; // 年龄 private String adderss; // 地址 private String score; // 分数 public Student() { } // 为了方便封装数据提供了有参构造 public Student(String id, String name, String age, String adderss, String score) { super(); this.id = id; this.name = name; this.age = age; this.adderss = adderss; this.score = score; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAdderss() { return adderss; } public void setAdderss(String adderss) { this.adderss = adderss; } } ===============主程序=========== package com.newcoder_10; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class StudentManager { public static void main(String[] args) throws ClassNotFoundException, IOException { // 程序开始加载本地数据 ArrayList<Student> array = new ArrayList<Student>(); File file = new File("Date.txt"); if (file.exists() && file.length() > 0) { // 本地数据存在则加载数据(判断大小是因为,如果空文件会报空指针异常) ArrayList<Student> list = load(); array = list; } else { // 如果本地不存在数据,则创建文件 file.createNewFile(); } while (true) { // 主界面 1.打印表头 2.输入信息 3. System.out.println("--------欢迎使用学生成绩管理系统--------"); System.out.println("1查询所有学生"); System.out.println("2增加学生"); System.out.println("3根据学号查询"); System.out.println("4按学号排序查询"); System.out.println("5按照分数排序查询"); System.out.println("6退出"); // 录入信息 Scanner sc = new Scanner(System.in); System.out.println("请输入你想要选择的功能:"); String choice = sc.nextLine(); // 选择 switch (choice) { case "1": // 1查询所有学生 findAllStudent(array); break; case "2": // 2增加学生 addStudent(array); store(array); break; case "3": // 3根据学号查询 selectById(array); break; case "4": // 按学号排序查询 orderById(array); break; case "5": // 5按照分数排序查询 orderByScore(array); break; case "6": // 退出 store(array); System.out.println("谢谢你的使用"); System.exit(0); break; default: System.out.println("此功能暂未开放"); break; } } } // 根据分数排序 private static void orderByScore(ArrayList<Student> array) { if (array.size() <= 0) { System.out.println("数据库为空!!"); return; } // 为了保护原始数据,采用克隆副本进行排序 List<Student> cList = (ArrayList<Student>) array.clone(); // 排序按照分数 Collections.sort(cList, new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { Double id1 = new Double(s1.getScore()); Double id2 = new Double(s2.getScore()); Integer result = id1 > id2 ? 1 : id1 < id2 ? -1 : 0; return result; } }); // 打印输出分数 System.out.println("学号\t\t姓名\t年龄\t地址\t成绩"); for (int i = 0; i < cList.size(); i++) { Student st = cList.get(i); System.out.println(st.getId() + "\t\t" + st.getName() + "\t" + st.getAge() + "\t" + st.getAdderss() + "\t" + st.getScore()); } } // 根据学号排序 private static void orderById(ArrayList<Student> array) { if (array.size() <= 0) { System.out.println("数据库为空!!"); return; } List<Student> cList = (ArrayList<Student>) array.clone(); // Collections.copy(array, cList); Collections.sort(cList, new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { Integer id1 = Integer.parseInt(s1.getId()); Integer id2 = Integer.parseInt(s2.getId()); Integer result = id1 > id2 ? 1 : id1 < id2 ? -1 : 0; return result; } }); System.out.println("学号\t\t姓名\t年龄\t地址\t成绩"); for (int i = 0; i < cList.size(); i++) { Student st = cList.get(i); System.out.println(st.getId() + "\t\t" + st.getName() + "\t" + st.getAge() + "\t" + st.getAdderss() + "\t" + st.getScore()); } } // 根据学号查询 private static void selectById(ArrayList<Student> array) { System.out.println("请输入要查询的学号"); Scanner sc = new Scanner(System.in); String id = sc.nextLine(); if (id == null) { System.out.println("输入为空!"); return; } if (array.size() <= 0) { System.out.println("数据库为空!!"); return; } boolean flag = false; Student st = null; for (int i = 0; i < array.size(); i++) { st = array.get(i); if (id.equals(st.getId())) { flag = true; break; } } if (flag) { System.out.println(st.getId() + "\t\t" + st.getName() + "\t" + st.getAge() + "\t" + st.getAdderss()); } else { System.out.println("数据库中未查询到数据!请修改学号"); } } // 存储数据 public static void store(ArrayList<Student> array) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Date.txt")); oos.writeObject(array); oos.flush(); oos.close(); } // 加载数据: public static ArrayList<Student> load() throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Date.txt")); Object obj = ois.readObject(); ois.close(); ArrayList<Student> list = (ArrayList<Student>) obj; return list; } // 查询所有学生信息方法 public static void findAllStudent(ArrayList<Student> array) { if (array.size() <= 0) { System.out.println("当前管理系统暂时没有信息"); } else { System.out.println("学号\t\t姓名\t年龄\t地址\t成绩"); for (int i = 0; i < array.size(); i++) { Student st = array.get(i); System.out.println(st.getId() + "\t\t" + st.getName() + "\t" + st.getAge() + "\t" + st.getAdderss() + "\t" + st.getScore()); } } } // 添加学生信息的方法 public static void addStudent(ArrayList<Student> array) { // 键盘录入信息 Scanner sc = new Scanner(System.in); String id; while (true) { System.out.println("请输入学号"); boolean flag = false; id = sc.nextLine(); // 添加判断是否已经有了这个学号 for (int i = 0; i < array.size(); i++) { Student s = array.get(i); String userId = s.getName(); if (userId.equals(id)) { flag = true; break; } } if (flag == true) { System.out.println("当前学号已经被占用,请重新输入"); // continue; } else { break; } } System.out.println("请输入姓名"); String name = sc.nextLine(); System.out.println("请输入年龄"); String age = sc.nextLine(); System.out.println("请输入住址"); String adderss = sc.nextLine(); System.out.println("请输入成绩"); String score = sc.nextLine(); // 创建学生对象 Student st = new Student(id, name, age, adderss, score); // 添加到集合中 array.add(st); } }
0 点赞 评论 收藏
分享
2018-07-09 13:08
已编辑
社区规范更新号
C++方向活动帖:【牛客带你学编程】【C++方向】0基础小白入门培养计划!&nbsp;&nbsp;&nbsp;牛客带你学编程活动总贴:【牛客带你学编程】0基础小白入门培养计划!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C++项目练习:第10期&nbsp;&nbsp;&nbsp;练习时间:6月15日-6月29日(2周)&nbsp;&nbsp;&nbsp;活动规则:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每一期一个项目,届时会开新帖发布&nbsp;&nbsp;&nbsp;学员直接将答案提交到该贴评论区即可&nbsp;&nbsp;&nbsp;两周后,公布导师参考答案&nbsp;&nbsp;&nbsp;导师评选出当期最佳代码(将设置为精彩回复)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;奖励:牛客大礼包一份(牛客定制水杯&nbsp;牛客定制笔&nbsp;牛客定制程序员徽章&nbsp;滑稽抱枕)&nbsp;&nbsp;&nbsp;参与方式:直接将你的代码回复到本帖评论区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------------------...
cj-123:#include "BSTree.h" #include<iostream> using namespace std; //前序遍历二叉树 template<class T> void BSTree<T>::preOrder(BSTNode<T> *tree) const { if(tree!=nullptr) { cout<<tree->key<<" "; preOrder(tree->left); preOrder(tree->right); } } template<class T> void BSTree<T>::preOrder() { preOrder(mRoot); } //中序遍历二叉树 template<class T> void BSTree<T>::inOrder(BSTNode<T> *tree) const { if(tree!=nullptr) { inOrder(tree->left); cout<<tree->key<<" "; inOrder(tree->right); } } template<class T> void BSTree<T>::inOrder() { inOrder(mRoot); } //后序遍历二叉树 template<class T> void BSTree<T>::postOrder(BSTNode<T> *tree) const { if(tree!=nullptr) { postOrder(tree->left); postOrder(tree->right); cout<<tree->key<<" "; } } template<class T> void BSTree<T>::postOrder() { postOrder(mRoot); } //递归实现查找二叉树中键值为key的节点 template<class T> BSTNode<T>* BSTree<T>::search(BSTNode<T> *x, T key)const { if(x->key==key) return x; else if(x->key>key) return search(x->left,key); else return search(x->right,key); } template<class T> BSTNode<T>* BSTree<T>::search(T key) { return search(mRoot,key); } //非递归实现查找二叉树中键值为key的节点 template<class T> BSTNode<T>* BSTree<T>::iterativeSearch(BSTNode<T> *x, T key)const { while(x!=nullptr) { if(x->key==key) return x; else if(x->key>key) x=x->left; else x=x->right; } return x; } template<class T> BSTNode<T>* BSTree<T>::iterativeSearch(T key) { return iterativeSearch(mRoot,key); } //查找最小节点,返回最小节点 template<class T> BSTNode<T>* BSTree<T>::minimum(BSTNode<T> *tree) { while(tree->left!=nullptr) { tree=tree->left; } return tree; } template<class T> T BSTree<T>::minimum() { return minimum(mRoot)->key; } //查找最大节点,返回最大节点 template<class T> BSTNode<T>* BSTree<T>::maximum(BSTNode<T> *tree) { while(tree->right!=nullptr) { tree=tree->right; } return tree; } template<class T> T BSTree<T>::maximum() { return maximum(mRoot)->key; } //插入节点到二叉搜索树 template<class T> void BSTree<T>::insert(BSTNode<T> *&tree, BSTNode<T> *z) { if(tree==nullptr) { tree=z; return; } BSTNode<T>* p=nullptr; BSTNode<T>* tmp=tree; while(tmp) { if(tmp->key==z->key) return; p=tmp; if(tmp->key>z->key) { tmp=tmp->left; } else { tmp=tmp->right; } } if(p->key>z->key) p->left=z; else p->right=z; } template<class T> void BSTree<T>::insert(T key) { BSTNode<T>* node=new BSTNode<T>(key); insert(mRoot,node); } //删除节点 template<class T> BSTNode<T>* BSTree<T>::remove(BSTNode<T> *&tree, BSTNode<T> *z) { if(tree==nullptr) return; BSTNode<T>* pcur=tree; while(pcur!=nullptr && pcur->key!=z->key) { if(pcur->key>z->key) pcur=pcur->left; else pcur=pcur->right; } if(pcur==nullptr) return; if(!pcur->left && !pcur->right) { delete pcur; pcur=nullptr; return; } if(pcur->left && pcur->right) { BSTNode<T>* tmp=pcur->right; while(tmp->left) tmp=tmp->left; if(pcur->right=tmp) { pcur->right=tmp->right; delete tmp; tmp=nullptr; return; } BSTNode<T>* node=pcur; pcur=tmp; tmp=node; delete tmp; tmp=nullptr; return; } if(pcur->left) { BSTNode<T>* p=pcur->parent; if(p==nullptr) { tree=pcur->left; delete pcur; pcur=nullptr; return; } if(p->right==pcur) { p->right=pcur->left; } if(p->left==pcur) { p->left=pcur->left; } return; } if(pcur->right) { BSTNode<T>* p=pcur->parent; if(p==nullptr) { tree=pcur->right; delete pcur; pcur=nullptr; return; } if(p->right==pcur) { p->right=pcur->right; } if(p->left==pcur) { p->left=pcur->right; } return; } } template<class T> void BSTree<T>::remove(T key) { BSTNode<T>* node=new BSTNode<T>(key); remove(mRoot,node); } //销毁二叉树 template<class T> void BSTree<T>::destory(BSTNode<T> *&tree) { if(tree) { BSTNode<T>* l=tree->left; BSTNode<T>* r=tree->right; delete tree; destory(l); destory(r); } } template<class T> void BSTree<T>::destory() { destory(mRoot); } //查找节点x的后继节点 template<class T> BSTNode<T>* BSTree<T>::successor(BSTNode<T> *x) { if(x==nullptr || x->right==nullptr) return nullptr; BSTNode<T>* node=x->right; while(node->left) node=node->left; return node; } //查找节点x的前驱节点 template<class T> BSTNode<T>* BSTree<T>::predecessor(BSTNode<T> *x) { if(x==nullptr) return nullptr; if(x->left) { x=x->left; while(x->right) x=x->right; return x; } BSTNode<T>* p=x->parent; if(p==nullptr) return p; if(p->right==x) return p; if(p->left==x) { BSTNode<T>* q=p->parent; while(q->right!=p) { p=q; q=p->parent; } return q; } }
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务