一 需求分析
此个人简历录入程序可实现相关信息的添加、删除、修改。
[if !supportLists]l [endif]通过文本框录入姓名,通过单选按钮选择性别,通过组合框选择专业(计算机,电子,工商等)和文化程度(大专,本科,硕士,博士等),设置“提交”与“取消”两个按键,当用鼠标点击“提交”按键时,在文本框中显示所填写以及选择的信息。当点击“取消”按键退出系统
实现查询与统计功能(如35岁以下计算机专业的人数)
实现存储与读取
参考博文和源码下载地址:
一 需求分析
此个人简历录入程序可实现相关信息的添加、删除、修改。
[if !supportLists]l [endif]通过文本框录入姓名,通过单选按钮选择性别,通过组合框选择专业(计算机,电子,工商等)和文化程度(大专,本科,硕士,博士等),设置“提交”与“取消”两个按键,当用鼠标点击“提交”按键时,在文本框中显示所填写以及选择的信息。当点击“取消”按键退出系统
实现查询与统计功能(如35岁以下计算机专业的人数)
实现存储与读取
参考博文和源码下载地址:
转载于:https://my.oschina.net/u/4188109/blog/3090520
成绩录入程序
代码演示
代码如下:
import java.util.Scanner; public class Test { public static void main(String[] args) { ArrayList list = new ArrayList<String>(); Scanner scanner = new Scanner(System.in); System.out.println("要记录多少位学员"); fun(list,scanner.nextInt());//调用fun方法为集合赋值 System.out.println(list); } private static void fun(ArrayList list,int num) { Scanner scanner = new Scanner(System.in); try { System.out.println("输入成绩"); list.add(scanner.nextInt());//录入 } catch (Exception e) {//如果不是则trycatch进行提示 System.out.println("输入错误请重新输入该学员的成绩"); } finally {//finally在trycatch后依然可以运行,进行判断长度 if (list.size() < num) { fun(list,num); } } } }
图例。
总结
以上就是今天的内容,本文介绍了trycatch和递归的使用方法与具体应用。
数据结构-链表的遍历和链接
链表的遍历-改进学生录入程序
改进单向链表学生成绩录入,添加一个查找函数,再输入结束后通过查找函数来查找用户输入的特定成绩。找到就返回该成绩所在的结点序号,找不到就输出·提示。
单向链表实现
#include "stdafx.h" struct Student { int grade; struct Student *next; }; typedef struct Student Node; typedef Node* Ptr; int main() { Ptr head; Ptr Creatlink(); void Sreach(Ptr head); head = Creatlink(); Sreach(head); return 0; } Ptr Creatlink() { Ptr head, previous, last; int num; head = (Ptr)malloc(sizeof(Node)); if (head == NULL) { printf_s("wrong!"); return NULL; } last = head; scanf_s("%d", &num); while (num != 0) { previous = last; previous->grade = num; last = (Ptr)malloc(sizeof(Node)); if (last == NULL) { printf_s("wrong!"); return NULL; } previous->next = last; scanf_s("%d", &num); } previous->next = NULL; free(last); return head; } void Sreach(Ptr head) { int i, num, flag; Ptr previous; i = 1; //变量结点的序号 flag = 0; //标志位 用来判断是否找到 printf_s("请输入要查询的成绩"); scanf_s("%d", &num); while (head != NULL) //遍历链表 { if (head->grade == num) //判断链表数据域的数据和需求查找是否相等 { printf_s("找到该结点位于第%d个结点\n",i); flag++; //找到标志位+1 } previous = head; //必须全部循环一次,这就是为啥不直接输出要使用判断条件的原因。释放所有结点 head = head->next; i++; free(previous); } if (flag == 0) //找不到,标志位为0,输出。 { printf_s("未找到该成绩"); } }
链表的链接
前置链表的尾结点的next指针指向后置链表的第一个结点,第一个结点的back指针指向后置链表的尾结点,后置链表第一个结点如果有back指针指向前置链表的尾结点,尾结点的next指针指向前置链表的第一个结点。
(四个指针,两个结点,头结点/尾结点next/back指针)
数据结构-链表的插入和删除-单向链表
链表的插入删除-改进学生录入程序
改进单向链表学生成绩录入,增加添加删除函数,再输入结束后通过添加删除函数来更改链表,遍历输出。
单向链表实现
#include "stdafx.h" struct Student { int grade; struct Student *next; }; typedef struct Student Node; typedef Node* Ptr; int main() { Ptr head; int num; Ptr Creatlink(); void Insert(Ptr head); void Delete(Ptr head); head = Creatlink(); printf_s("选择操作:1.插入。2.删除\n"); scanf_s("%d", &num); if (num == 1) { Insert(head); } else if (num=2) { Delete(head); } return 0; } Ptr Creatlink() { Ptr head, previous, last; int num; head = (Ptr)malloc(sizeof(Node)); if (head == NULL) { printf_s("wrong!"); return NULL; } last = head; scanf_s("%d", &num); while (num != 0) { previous = last; previous->grade = num; last = (Ptr)malloc(sizeof(Node)); if (last == NULL) { printf_s("wrong!"); return NULL; } previous->next = last; scanf_s("%d", &num); } previous->next = NULL; free(last); return head; } void Insert(Ptr head) { Ptr previous, last, temp; int num, num1, i; //num是插入的成绩 num1是插入的位置 last = head; printf_s("请输入要插入的成绩"); scanf_s("%d", &num); printf_s("请输出要插入的位置"); scanf_s("%d", &num1); //申请要插入的结点的空间 失败则退出 temp = (Ptr)malloc(sizeof(Node)); if (temp == NULL) { printf_s("wrong!"); return ; } temp->grade = num; if(num==1) //如果插入点在第一个结点之前 将head指针指向第一个结点 (新结点成为第一个结点) { temp->next = head; //temp->next和head一样 现在指向原来的第一个结点 head = temp; } else //如果插入的不是第一个结点,找到位置正常插入即可。 { for (i = num1; i > 1; i--) //last其实指向head { previous = last; //last指针后移到该添加的结点 last = last->next; } previous->next = temp; //上一个last结点next指针指向temp temp的next指针指向最后的last结点 成功添加 temp->next = last; } printf_s("插入成功 当前成绩为:"); while (head != NULL) { printf_s("%d\n", head->grade); previous = head; head = head->next; free(previous); } } void Delete(Ptr head) { Ptr previous, last; int num; last = head; previous = NULL; //骚操作 printf_s("请输入要删除的成绩:"); scanf_s("%d", &num); while (last->grade != num) //骚操作。如果删除是头结点 则这个循环一次都不执行,下面if判断语句执行 { previous = last; last = last->next; } if (previous!=NULL) //previous不是空 那么就是不删除头结点的情况 { previous->next = last->next; //要删除的结点的前一个结点的next指针直接指向要删除结点的下一个结点 last没有链接再链表内了 free(last); //释放last结点 } else //如果被删除的是第一个结点,将head指针指向第二个结点释放第一个结点 { head = last->next; free(last); } printf_s("删除成功 当前成绩为:"); while (head != NULL) { printf_s("%d\n", head->grade); previous = head; head = head->next; free(previous); } }
示意图