-
2021-10-13 17:32:35
背景
由于现代软件的高度复杂性使得传统的面向过程程序设计已不能满足需要,取而代之的是面向对象程序设计,其难点在于需要将各类事物抽象成类,然后利用封装、继承和多态的特性进行设计。对于初学者而言要想设计良好的面向对象程序具有较大的挑战。案例式教学通过一个高质量的案例来详细阐述知识点是什么及如何应用,并带领学习者共同完成,因此具有良好的教学效果。然而,现有的面向对象程序设计案例如学生成绩管理系统大多存在代码命名不规范、代码编码随意性大缺乏严谨性,代码质量较为糟糕,尤其是并未充分体现面向对象的程序设计理念。因此迫切需要一个能够充分体现面向对象的设计理念、代码严谨规范的高质量的入门级学生成绩管理系统的案例,帮助初学者深入的理解面向对象程序设计。
学生成绩管理系统是各类程序设计课程的一个常见课程设计项目,包括了学生成绩信息的增删改查和排序功能。虽然学生成绩管理系统互联网上随处可见,但是质量参差不齐,缺乏高质量的面向对象设计案例。本资源针对上述问题进行了充分的设计,是一份十分难得的面向对象程序设计的入门教学案例。系统主要包括了Student、StudentManager、FileManager、MenuManager四个类,其中StudentManager是核心类,也是系统的入口所在。
系统功能模块图
(温馨提示:点击图片可以获得更加清晰的文字信息。)
部分系统截图
代码
更多相关内容 -
学生信息管理系统算法
2011-11-19 10:49:16该算法采用文件管理学生的信息,同时通过人机交互方式操作系统的执行 -
学生信息管理系统(结构化程序)(C语言)
2019-04-12 21:52:04学生信息管理系统(结构化程序)(C语言) 一、实验目的 明确结构化程序设计的基本结构。 2.通过对问题的分析,设计合理的结构化程序解决问题 二、实验内容 对学生信息管理系统,要求完成以下基本任务: 1.改写...学生信息管理系统(结构化程序)(C语言)
一、实验目的
- 明确结构化程序设计的基本结构。
2.通过对问题的分析,设计合理的结构化程序解决问题
二、实验内容
对学生信息管理系统,要求完成以下基本任务:
1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。
2.将功能补充完全(基于文件处理,完成刷新和保存功能)。
3.将学生信息改为更好的数据组织,而非离散形式(结构体)。
提高要求:
可将程序中的不足(如数据验证)等根据自己的能力与理解完成。
三、算法流程图
程序框架流程图:
主要算法流程图
四、主要代码
学生信息结构化:`struct xinxi { char code[LEN + 1]; /* 学号*/ char name[LEN + 1]; /* 姓名*/ int age; /* 年龄*/ char sex[LEN + 1]; /* 性别*/ float score[3]; /* 3门课程成绩*/ }stud[N];
源代码:
/********************************************************************************* *FileName: Test1.cpp *Author: Elf.苏洛曦 *e-mail: 617992304@qq.com *Version: 1.0.0 *Date: 2019.2.26 *Description: 学生信息管理系统 *History: 1.Date: 2019.4.7 Author: Elf.苏洛曦 Modification: Create project 2.Date: 2019.4.9 Author: Qixiang.Su Modification: Edit project **********************************************************************************/ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> /*I/O函数*/ #include<stdlib.h> /*其它说明*/ #include<string.h> /*字符串函数*/ #define LEN 15 /* 学号和姓名最大字符数,实际请更改*/ #define N 50 /* 最大学生人数,实际请更改*/ //定义学生信息结构体 struct xinxi { char code[LEN + 1]; /* 学号*/ char name[LEN + 1]; /* 姓名*/ int age; /* 年龄*/ char sex[LEN + 1]; /* 性别*/ float score[3]; /* 3门课程成绩*/ }stud[N]; int k = 1, n, m; //n为学生的总人数,m为新增学生数 void save(); //保存学生信息 void seek(); //查找 void modify(); //修改学生信息 void insert(); //插入学生信息 void del(); //删除学生信息 void display(); //显示当前的学生信息 void menu(); //主界面 void read(); //读取信息 int main() { while (k) { menu(); } system("pause"); return 0; } void help() { printf("\n0.欢迎使用系统帮助!\n"); printf("\n1.初次进入系统后,请先选择增加学生信息;\n"); printf("\n2.按照菜单提示键入数字代号;\n"); printf("\n3.增加学生信息后,切记保存;\n"); printf("\n4.谢谢您的使用!\n"); } void read() { char filename[LEN + 1]; FILE *p; int i = 0; printf("请输入已经存有学生信息的文件名:\n"); scanf("%s", filename); if ((p = fopen(filename, "r")) == NULL) { printf("error on open %s!", filename); printf("先选择菜单4输入学生信息并保存\n"); system("pause"); return; } while (fscanf(p, "%s%s%d%s%f%f%f\n", stud[i].code, stud[i].name, &stud[i].age, stud[i].sex, &stud[i].score[0], &stud[i].score[1], &stud[i].score[2]) == 7) { i++; } n = i; if (0 == i) { printf("文件为空"); } else { printf("读入完成\n"); fclose(p); system("pause"); } } void seek() { int i, item, flag; char s1[21]; /* 以姓名和学号最长长度+1为准*/ printf("------------------\n"); printf("-----1.按学号查询-----\n"); printf("-----2.按姓名查询-----\n"); printf("-----3.退出本菜单-----\n"); printf("------------------\n"); while (1) { printf("请选择子菜单编号:"); scanf("%d", &item); flag = 0; switch (item) { case 1: printf("请输入要查询的学生的学号:\n"); scanf("%s", s1); for (i = 0; i < n; i++) { if (strcmp(stud[i].code, s1) == 0) { flag = 1; printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n"); printf("--------------------------------------------------------------------\n"); printf("%6s %7s %6d %6s %9.1f %10.1f %10.1f\n", stud[i].code, stud[i].name, stud[i].age, stud[i].sex, stud[i].score[0], stud[i].score[1], stud[i].score[2]); } } if (0 == flag) { printf("该学号不存在!\n"); break; } case 2: printf("请输入要查询的学生的姓名:\n"); scanf("%s", s1); for (i = 0; i < n; i++) { if (strcmp(stud[i].name, s1) == 0) { flag = 1; printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n"); printf("--------------------------------------------------------------------\n"); printf("%6s %7s %6d %6s %9.1f %10.1f %10.1f\n", stud[i].code, stud[i].name, stud[i].age, stud[i].sex, stud[i].score[0], stud[i].score[1], stud[i].score[2]); } } if (0 == flag) { printf("该姓名不存在!\n"); break; } case 3: return; default: printf("请在1-3之间选择\n"); } } } void modify() { int i, item, num = -1; //item表示输入的菜单编号,num为学生数组的序号 char sex1[LEN + 1], s1[LEN + 1], s2[LEN + 1]; /* 以姓名和学号最长长度+1为准*/ float score1; printf("请输入要要修改的学生的学号:\n"); scanf("%s", s1); for (i = 0; i < n; i++) { if (strcmp(stud[i].code, s1) == 0) { num = i; } } if (num != -1) { printf("------------------\n"); printf("1.修改姓名\n"); printf("2.修改年龄\n"); printf("3.修改性别\n"); printf("4.修改C语言成绩\n"); printf("5.修改高等数学成绩\n"); printf("6.修改大学英语成绩\n"); printf("7.退出本菜单\n"); printf("------------------\n"); while (1) { printf("请选择子菜单编号:"); scanf("%d", &item); switch (item) { case 1: printf("请输入新的姓名:\n"); scanf("%s", s2); strcpy(stud[num].name, s2); break; case 2: printf("请输入新的年龄:\n"); scanf("%d", &stud[num].age); break; case 3: printf("请输入新的性别:\n"); scanf("%s", sex1); strcpy(stud[num].sex, sex1); break; case 4: printf("请输入新的C语言成绩:\n"); scanf("%f", &score1); stud[num].score[0] = score1; break; case 5: printf("请输入新的高等数学成绩:\n"); scanf("%f", &score1); stud[num].score[1] = score1; break; case 6: printf("请输入新的大学英语成绩:\n"); scanf("%f", &score1); stud[num].score[2] = score1; break; case 7: return; default:printf("请在1-7之间选择\n"); } } printf("修改成功!"); } else { printf("该学号不存在!\n"); system("pause"); } } void sort() { int i, j, k, *p, *q, s; char temp[LEN + 1], ctemp; float ftemp; for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) { if (strcmp(stud[j - 1].code, stud[j].code)>0) { strcpy(temp, stud[j - 1].code); strcpy(stud[j - 1].code, stud[j].code); strcpy(stud[j].code, temp); strcpy(temp, stud[j - 1].name); strcpy(stud[j - 1].name, stud[j].name); strcpy(stud[j].name, temp); strcpy(temp, stud[j - 1].sex); strcpy(stud[j - 1].sex, stud[j].sex); strcpy(stud[j].sex, temp); p = &stud[j - 1].age; q = &stud[j].age; s = *q; *q = *p; *p = s; } for (k = 0; k < 3; k++) { ftemp = stud[j - 1].score[k]; stud[j - 1].score[k] = stud[j].score[k]; stud[j].score[k] = ftemp; } } } } void insert() { int i = n, j, flag; printf("请输入待增加的学生数:\n"); scanf("%d", &m); if (m > 0) { do { flag = 1; while (flag) { flag = 0; printf("请输入第%d位学生的学号:\n", i + 1); scanf("%s", stud[i].code); for (j = 0; j < i; j++) { if (strcmp(stud[i].code, stud[j].code) == 0) { printf("该学号已存在!"); flag = 1; break; } } } printf("请输入第%d 个学生的姓名:\n", i + 1); scanf("%s", stud[i].name); printf("请输入第%d 个学生的年龄:\n", i + 1); scanf("%d", &stud[i].age); printf("请输入第%d 个学生的性别:\n", i + 1); scanf(" %s", stud[i].sex); printf("请输入第%d 个学生的C语言成绩\n", i + 1); scanf("%f", &stud[i].score[0]); printf("请输入第%d 个学生的高等数学成绩:\n", i + 1); scanf("%f", &stud[i].score[1]); printf("请输入第%d 个学生的大学英语成绩:\n", i + 1); scanf("%f", &stud[i].score[2]); if (0 == flag) { i++; } } while (i < n + m); n += m; printf("信息增加完毕!\n\n"); sort(); system("pause"); } } void del() { int i, j, flag = 0; char s1[LEN + 1]; printf("请输入要删除学生的学号:\n"); scanf("%s", s1); for (i = 0; i < n; i++) { if (strcmp(stud[i].code, s1) == 0) { flag = 1; for (j = i; j < n - 1; j++) stud[j] = stud[j + 1]; } } if (0 == flag) { printf("该学号不存在!\n"); } if (1 == flag) { printf("删除成功,显示结果请选择菜单\n"); n--; } system("pause"); } void display() { int i; printf("共有%d位学生的信息:\n", n); if (0 != n) { printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n"); printf("--------------------------------------------------------------------\n"); for (i = 0; i < n; i++) { printf("%7s %7s %6d %6s %9.1f %10.1f %10.1f\n", stud[i].code, stud[i].name, stud[i].age, stud[i].sex, stud[i].score[0], stud[i].score[1], stud[i].score[2]); } } system("pause"); } void save() { char filename[LEN + 1]; FILE *fp; int i = 0; printf("请输入学生信心将要保存的文件名:\n"); scanf("%s", filename); fp = fopen(filename, "w"); for (i = 0; i < n; i++) { fprintf(fp, "%s\t %s\t% d %s \t%.1f \t %.1f\t %.1f\n", stud[i].code, stud[i].name, stud[i].age, stud[i].sex, stud[i].score[0], stud[i].score[1], stud[i].score[2]); } printf("保存成功!\n"); fclose(fp); system("pause"); } void menu() { int num; printf(" \n\n \n\n"); printf(" ******************************************************\n\n"); printf(" * 学生信息管理系统 *\n \n"); printf(" ******************************************************\n\n"); printf("*********************系统功能菜单************************* \n"); printf(" ---------------------- ---------------------- \n"); printf(" ********************************************* \n"); printf(" * 0.系统帮助及说明 * * 1.刷新学生信息 * \n"); printf(" ********************************************* \n"); printf(" * 2.查询学生信息 * * 3.修改学生信息 * \n"); printf(" ********************************************* \n"); printf(" * 4.增加学生信息 * * 5.按学号删除信息 * \n"); printf(" ********************************************* \n"); printf(" * 6.显示当前信息 * * 7.保存当前学生信息* \n"); printf(" ********************** ********************** \n"); printf(" * 8.退出系统 * \n"); printf(" ********************** \n"); printf(" ---------------------- ---------------------- \n"); printf("请选择菜单编号:"); scanf("%d", &num); switch (num) { case 0: help(); break; case 1: read(); break; case 2: seek(); break; case 3: modify(); break; case 4: insert(); break; case 5: del(); break; case 6: display(); break; case 7: save(); break; case 8: k = 0; break; default: printf("请在0-8之间选择\n"); } }
五、测试与调试
主界面:
帮助:
(1)出现错误:增加学生信息,输入性别为男后,成绩没有提示输入自动跳过,如下图:
解决方案:对insert()函数中的变量进行检查,发现性别定义为是char类型,只能接收一个字符,将char类型的sex改为char[],问题得到解决。如下图:
将已经录入的信息,保存在指定的文件中:
显示当前的学生信息:
查询学生信息,输入不存在的学号,提示错误,重新输入已经存在的学号,显示学生信息:
查询学生信息,输入不存在的姓名,提示错误,重新输入已经存在的姓名,显示学生信息:
修改学生信息,将张三信息修改如下:
查询结果为:
将其信息保存在classmate.txt文件中,退出程序。
再次打开程序,显示当前学生信息为空:
从文件中读取学生的信息,输入不存在的文件提示错误,输入正确的文件,可将信息读入:
显示当前学生信息:
读入classmate.txt中的信息,显示结果如下:
删除学生信息,输入不存在的学号,提示错误:
输入已存在的学号,成功将学生信息删除,显示如下:
六、总结
通过本次实验,对结构化程序的特点有了进一步了解,程序具有唯一的入口和出口,并且不会出现死循环,将所要开发的系统划分成立多个相互独立的模块,这样每一个功能的实现不会受到其他部分的牵连,为扩充已有的系统、建立新系统带来了很多方便。在修改的时候易读、易理解。但数据的保护性不好。在以后的开发过程中应该更好的利用结构化程序的优点,将要开发的系统功能模块化,这样可以将复杂的问题细分成每一个简单的问题,从而提高开发的效率。在本次实验中也对char类型有了更深入的了解,感觉char类型在解决实际问题的时候有一定的局限性。熟悉了在C语言中对文件的操作。 - 明确结构化程序设计的基本结构。
-
学生信息管理系统详细设计.pdf
2020-08-19 11:07:54学生信息管理系统 详细设计 课程名称软件工程 指导老师冯 年 荣 组 员岳一沿朱隆君张敏 张雨 邵天宇万文彬 2015/5/1 1 详细设计概述 详细设计也叫做程序设计 它不同于编码或编制程序 在详细设计阶段 要决定各个模块 ... -
Java——学生管理系统~最详细的算法(增、删、查、找)
2022-03-27 21:12:20Java——学生管理系统(增、删、查、找)目录
1 定义学生类
1.1 思路解析
学生类:
- Student
成员变量:
- 学号:sid
- 姓名:name
- 年龄:age
- 居住的:address
构造方法:
- 无参构造
- 带四个参数的构造
成员方法:
- 每个成员变量对应给出get/set方法
1.1 代码实现
public class Student { private String sid; //学号 private String name; //姓名 private String age; //年龄 private String address; //居住地 public Student() { } public Student(String sid, String name, String age, String address) { this.sid = sid; this.name = name; this.age = age; this.address = address; } public void setSid(String sid) { this.sid = sid; } public String getSid() { return sid; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(String age) { this.age = age; } public String getAge() { return age; } public void setAddress(String address) { this.address = address; } public String getAddress() { return address; } }
2 主界面的代码编写
2.1 思路解析
- 用输出语句完成主界面的编写
- 用Scanner实现键盘录入数据
- 用Switch语句完成操作的选择
- 用循环完成再次回到主界面
2.2 代码实现
public static void main(String[] args) { //创建集合对象,用于存储学生数据 ArrayList<Student> array =new ArrayList<Student>(); //用循环再次回到主界面 while (true) { //用输出语句完成主界面的编写 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("请输入你的选择:"); //用Scanner实现键盘录入数据 Scanner sc = new Scanner(System.in); String line = sc.nextLine(); //用switch语句完成操作的选择 switch (line) { case "1": //调用addStudent方法,用来添加学生 addStudent(array); break; case "2": //调用deleteStudent方法,用来删除学生 deleteStudent(array); break; case "3": //调用updateStudent方法,用来修改学生 updateStudent(array); break; case "4": //调用findtudent方法,用来查看学生 findStudent(array); break; case "5": System.out.println("谢谢使用"); //break; System.exit(0);//JVM虚拟机退出 } } }
2.3 效果图展示
3 添加学生的代码编写
3.1 思路解析
用键盘录入选择添加学生
定义一个方法,用于添加学生
- ① 显示提示信息,提示要输入何种信息
- ② 键盘录入学生对象所需的数据
- ③ 创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
- ④ 将学生对象添加到集合中(保存)
- ⑤ 给出添加成功提示
调用方法
3.2 代码部分
//定义一个方法,用于添加学生信息 public static void addStudent(ArrayList<Student> array) { //键盘录入学生对象所需要的数据,显示提示信息,提示要输入何种信息 Scanner sc=new Scanner(System.in); System.out.println("请输入学生学号"); String sid = sc.nextLine(); System.out.println("请输入学生姓名"); String name = sc.nextLine(); System.out.println("请输入学生年龄"); String age = sc.nextLine(); System.out.println("请输入学生居住地"); String address = sc.nextLine(); //创建学生对象,把键盘录入的数据赋值给学生对象的成员变量 Student s=new Student(); s.setSid(sid); s.setName(name); s.setAge(age); s.setAddress(address); //将学生对象添加到集合中 array.add(s); //给出添加成功提示 System.out.println("恭喜你,添加学生成功!"); }
3.3 效果展示
4 查看学生的代码编写
4.1 思路解析
用键盘录入选择查看所有学生信息
定义一个方法,用于查看学生信息
- 显示表头信息
- 将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
调用方法
4.2 代码部分
//定义一个方法,用于查看学生信息 public static void findStudent(ArrayList<Student> array) { //判断集合中是否有数据,如果没有显示提示信息 if (array.size() == 0) { System.out.println("暂无信息,请先手动添加后再进行查询!"); //为了不让程序往下执行,给出return; return; } //显示表头信息 //\t即就是Tab键 System.out.println("学号\t\t\t姓名\t\t年龄\t\t居住地"); //将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁” for (int i = 0; i < array.size(); i++) { Student s = array.get(i); System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t" + s.getAddress()); } }
4.2 效果展示
未添加学生信息时查看如下
添加成功后显示如下
5 删除学生的代码编写
5.1 思路解析
用键盘录入选择删除学生信息
定义一个方法,用于删除学生信息
- 显示提示信息
- 键盘录入要删除的学生学号
- 遍历集合将对应学生对象从集合中删除
- 给出删除提示成功提示
调用方法
5.2 代码实现
//定义一个方法,用于删除学生信息 public static void deleteStudent(ArrayList<Student> array) { //键盘录入要删除的学生学号,显示提示信息 Scanner sc = new Scanner(System.in); //使用index,防止学号不存在的问题发生 int index = -1;//因为i的值不可能为负数,所以采用这个值 System.out.println("请输入你要删除的学生学号:"); String sid = sc.nextLine(); //遍历集合将对应学生对象从集合中删除 for (int i = 0; i < array.size(); i++) { Student s = array.get(i); if (s.getSid().equals(sid)) { array.remove(i); index = i; //给出删除提示成功提示 System.out.println("您已成功删除"); break; } else { if (index == -1) { System.out.println("此学生的信息未被录入,请您添加后再进行删除!"); } } } }
5.3 效果展示
6 修改学生的代码编写
6.1思路解析
用键盘录入选择修改学生信息
定义一个方法,用于修改学生信息
- 显示提示信息
- 键盘录入要修改的学生学号
- 键盘录入要修改的学生信息
- 遍历集合修改对应的学生信息
- 给出修改提示成功提示
调用方法
6.2 代码实现
//定义一个方法,用于修改学生信息 public static void updateStudent(ArrayList<Student> array) { //键盘录入要修改的学生学号,显示提示信息 Scanner sc = new Scanner(System.in); //防止学号不存在问题 int index = -1;//i的值不可能为负数,所以采用这个值 System.out.println("请输入您要修改的学生的学号"); String sid = sc.nextLine(); //键盘录入要修改的学生信息 System.out.println("请输入学生新姓名"); String name = sc.nextLine(); System.out.println("请输入学生新年龄"); String age = sc.nextLine(); System.out.println("请输入学生新居住地"); String address = sc.nextLine(); //创建学生对象 Student s = new Student(); s.setSid(sid); s.setName(name); s.setAge(age); s.setAddress(address); //遍历集合修改对应的学生信息 for (int i = 0; i < array.size(); i++) { Student student = array.get(i); if (student.getSid().equals(sid)) { array.set(i, s); index = i; //给出修改成功提示 System.out.println("您已成功修改!"); break; } else { if (index == -1) { System.out.println("此学生的信息未被录入,请您添加后再进行修改!"); } } } }
6.3 结果展示
源码
package studentManager; /* 学生类 */ public class Student { private String sid; //学号 private String name; //姓名 private String age; //年龄 private String address; //居住地 public Student() { } public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } 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 getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
package studentManager; import java.util.ArrayList; import java.util.Scanner; /* 学生管理系统 */ public class StudentManager { public static void main(String[] args) { //创建集合对象,用于存储学生数据 ArrayList<Student> array = new ArrayList<Student>(); //用循环再次回到主界面 while (true) { //用输出语句完成主界面的编写 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("请输入你的选择:"); //用Scanner实现键盘录入数据 Scanner sc = new Scanner(System.in); String line = sc.nextLine(); //用switch语句完成操作的选择 switch (line) { case "1": //调用addStudent方法,用来添加学生 addStudent(array); break; case "2": //调用deleteStudent方法,用来删除学生 deleteStudent(array); break; case "3": //调用updateStudent方法,用来修改学生 updateStudent(array); break; case "4": //调用findtudent方法,用来查看学生 findStudent(array); break; case "5": System.out.println("谢谢使用"); //break; System.exit(0);//JVM虚拟机退出 } } } //定义一个方法,用于添加学生信息 public static void addStudent(ArrayList<Student> array) { //键盘录入学生对象所需要的数据,显示提示信息,提示要输入何种信息 Scanner sc = new Scanner(System.in); System.out.println("请输入学生学号"); String sid = sc.nextLine(); System.out.println("请输入学生姓名"); String name = sc.nextLine(); System.out.println("请输入学生年龄"); String age = sc.nextLine(); System.out.println("请输入学生居住地"); String address = sc.nextLine(); //创建学生对象,把键盘录入的数据赋值给学生对象的成员变量 Student s = new Student(); s.setSid(sid); s.setName(name); s.setAge(age); s.setAddress(address); //将学生对象添加到集合中 array.add(s); //给出添加成功提示 System.out.println("恭喜你,添加学生成功!"); } //定义一个方法,用于查看学生信息 public static void findStudent(ArrayList<Student> array) { //判断集合中是否有数据,如果没有显示提示信息 if (array.size() == 0) { System.out.println("暂无信息,请先手动添加后再进行查询!"); //为了不让程序往下执行,给出return; return; } //显示表头信息 //\t即就是Tab键 System.out.println("学号\t\t\t姓名\t\t年龄\t\t居住地"); //将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁” for (int i = 0; i < array.size(); i++) { Student s = array.get(i); System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t" + s.getAddress()); } } //定义一个方法,用于删除学生信息 public static void deleteStudent(ArrayList<Student> array) { //键盘录入要删除的学生学号,显示提示信息 Scanner sc = new Scanner(System.in); int index = -1; System.out.println("请输入你要删除的学生学号:"); String sid = sc.nextLine(); //遍历集合将对应学生对象从集合中删除 for (int i = 0; i < array.size(); i++) { Student s = array.get(i); if (s.getSid().equals(sid)) { array.remove(i); index = i; //给出删除提示成功提示 System.out.println("您已成功删除"); break; } else { if (index == -1) { System.out.println("信息不存在,请您添加后在进行删除!"); } } } } //定义一个方法,用于修改学生信息 public static void updateStudent(ArrayList<Student> array) { //键盘录入要修改的学生学号,显示提示信息 Scanner sc = new Scanner(System.in); //防止学号不存在问题 int index = -1;//i的值不可能为负数,所以采用这个值 System.out.println("请输入您要修改的学生的学号"); String sid = sc.nextLine(); //键盘录入要修改的学生信息 System.out.println("请输入学生新姓名"); String name = sc.nextLine(); System.out.println("请输入学生新年龄"); String age = sc.nextLine(); System.out.println("请输入学生新居住地"); String address = sc.nextLine(); //创建学生对象 Student s = new Student(); s.setSid(sid); s.setName(name); s.setAge(age); s.setAddress(address); //遍历集合修改对应的学生信息 for (int i = 0; i < array.size(); i++) { Student student = array.get(i); if (student.getSid().equals(sid)) { array.set(i, s); index = i; //给出修改成功提示 System.out.println("您已成功修改!"); break; } else { if (index == -1) { System.out.println("此学生的信息未被录入,请您添加后再进行修改!"); } } } } }
-
学生通讯录管理系统-数据结构课程设计.doc
2021-10-20 21:30:44学生通讯录管理系统-数据结构课程设计.doc 纸质通讯录已经不能满足大家的要求,容易丢失、查找困难等问题是纸质通讯录所有能克服的缺点。“学生通讯录管理系统”是为了帮助老师、同学等管理和分析的一种应用程序。 -
学生成绩管理系统数据结构课程设计.docx
2020-08-25 18:34:44--学生成绩管理系统 算法与数据结构课程设计 综合实验 课程设计名称学生成绩管理系统 专 业计算机科学与技术 学生成绩管理系统 一问题的描述和分析 1.1问题的描述 随着社会的发展和经济时代的到来管理信息系统在各行... -
学生信息管理系统C语言编程.docx
2020-02-24 07:50:09学生信息管理系统 C 语言编程 问题描述 学生信息的管理是每个学校必须具有的管理功能主要是对学生的基本情况及学习成绩等方 面的管理该系统模拟一个简单的学生管理系统要求对文件中所存储的学生数据进行各种 常规... -
Python实现学生信息管理系统
2019-07-08 12:28:50试设计一个学生信息管理系统,使之能提供一下基本功能: 系统以菜单方式工作 学生信息录入功能(学生信息用文件保存)--- 输入 学生信息浏览功能 --- 输出 查询、排序功能 --- 算法 按学号查询 按姓名查询 学生...要求描述:
学生的信息包括:学号,姓名,年龄,性别,出生日期,地址,电话,E-mail等等。试设计一个学生信息管理系统,使之能提供一下基本功能:
- 系统以菜单方式工作
- 学生信息录入功能(学生信息用文件保存)--- 输入
- 学生信息浏览功能 --- 输出
- 查询、排序功能 --- 算法
- 按学号查询
- 按姓名查询
- 学生信息的删除与修改(可选项)
基本思路同之前写的那篇图书借阅系统,在此就不多赘述。
直接上代码,代码如下:
import os class Student(object): def __init__(self, sid, name, age=None, gender=None, birth=None, address=None, tel=None, mail=None): self.sid = sid self.name = name self.age = age self.gender = gender self.birth = birth self.address = address self.tel = tel self.mail = mail def __str__(self): return "%s:%s:%s:%s:%s:%s:%s:%s" %(self.sid, self.name, self.age, self.gender, self.birth, self.address, self.tel, self.mail) class StudentManage(object): students = [] def __init__(self): filename = 'students.csv' if os.path.exists(filename): with open(filename) as f: for line in f: info = line.split(':') studentObj = Student(*info) self.students.append(studentObj) print("加载缓存的学生信息成功") else: print("无缓存的学生信息!") def add(self): sid = input("学号: ") name = input("姓名: ") age = input("年龄: ") gender = input("性别(1-男 2-女): ") birth = input("出生日期(年-月-日): ") address = input("地址: ") tel = input("联系电话: ") mail = input("电子邮箱: ") stu = Student(sid, name, age, gender, birth, address, tel, mail) self.students.append(stu) print("录入学生[%s]信息成功" %(name)) def show(self): print("学生信息展示".center(50, '*')) for student in self.students: print('-' * 50) print(str(student)) def search(self, key, value): if key in ['sid', 'name']: for student in self.students: if getattr(student, key) == value: print(str(student)) else: print("未找到符合条件的学生信息!") else: print("系统只支持根据[学号]和[姓名]查询!") def sort(self, key): # 根据指定的key值进行排序 sorted_students = sorted(self.students, key=lambda x: int(getattr(x, key)) if x else None) for student in sorted_students: print(student) def delete(self, key, value): if key in ['sid', 'name']: for student in self.students: if getattr(student, key) == value: self.students.remove(student) print("删除属性值[%s]为[%s]的学生信息" % (key, value)) else: print("未找到符合条件的学生信息!") else: print("当前系统只支持根据 [学号] 和 [姓名] 删除!") def modify(self, key, oldvalue, newvalue): if key in ['sid', 'name']: for student in self.students: if getattr(student, key) == oldvalue: setattr(student, key, newvalue) print("修改属性值[%s]为[%s]的学生信息为[%s]成功" % (key, oldvalue, newvalue)) else: print("未找到符合条件的学生信息!") else: print("当前系统只支持根据 [学号] 和 [姓名] 修改!") def save(self): filename = 'students.csv' f = open(filename, 'w') for student in self.students: f.write(str(student) + '\n') print("写入学生信息成功!") f.close() def main(): manager = StudentManage() while True: menu = """ 学生信息管理系统 1. 学生信息录入 2. 学生信息浏览 3. 学生信息查询 4. 学生信息排序 5. 学生信息的删除 6. 学生信息的修改 7. 退出 请输入正确的选择: """ choice = input(menu) if choice == '1': manager.add() manager.save() elif choice == '2': manager.show() elif choice == '3': key = input("查询(sid-根据学号, name-根据姓名): ") value = input("查询值: ") manager.search(key, value) elif choice == '4': key = input("排序(sid-根据学号, age-根据年龄): ") manager.sort(key) elif choice == '5': key = input("删除(sid-根据学号, name-根据姓名): ") value = input("删除的属性值: ") manager.delete(key, value) elif choice == '6': key = input("修改(sid-根据学号, name-根据姓名): ") value1 = input("旧的属性值: ") value2 = input("新的属性值: ") manager.modify(key, value1, value2) elif choice == '7': exit(0) else: print("请输入正确的选择!") main()
运行之后,就会输出可供选择的功能菜单键,如下:
下面就是基本的功能实现了:
1.录入学生信息
2.浏览学生信息
3.查询指定学生信息
4.对学生信息进行排序(可以根据学号或者年龄从小到大排序)
5.删除指定学生的信息
6.修改指定学生信息(修改学号或姓名)
操作后可以看到学生信息会发生变化:
然后输入7之后就会退出该系统。
以上就是一个通过Python实现的简易的学生信息管理系统。
-
可行性分析报告-学生信息管理系统
2022-01-04 16:43:121、引言 1.1编写目的 编写本可行性研究报告的... 因此,编写一个学生管理系统可以为学校办公管理提供一个快速、简单规范的管理平台,使学院在学生信息管理方面更加规范化,快捷化。 注意:本文很多地方有缺陷,仅供参考 -
c++实现学生信息管理系统
2020-06-01 19:10:36对学生信息管理系统,要求完成以下基本任务: 1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。 2.将功能补充完全(基于文件处理,完成刷新和保存功能)。 3.将学生信息改为更好的数据组织,而非离散... -
学生信息管理系统需求规格说明书
2021-11-28 15:54:37该文档给出了“学生信息管理系统”的整体结构及内容说明。同时对功能需求和性能需求进行了概述。且该文档便于用户,开发人员之间进行理解和交流,反映出用户问题的结构,可以作为项目开发工作的基础和依据以及确认... -
学生信息管理系统总体设计
2010-12-16 11:59:07学生信息管理系统开发的总体任务是实现学生信息关系的系统化、规范化和 自动化。本系统开发的基本要求与功能是实现学生信息数据包括与学生有关的数据的管理与操作处理,基于Microsoft SQL Server2000数据库系统的... -
C语言课程设计——学生信息管理系统
2022-01-18 11:48:24试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作 学生信息录入功能(学生信息用文件保存)---输入 学生信息浏览功能——输出 查询、排序功能——算法 1、按学号查询 2、按姓名查询 学生... -
用单链表实现学生信息管理系统
2019-03-24 23:38:11用单链表实现学生信息管理系统 问题描述 定义一个包含学生信息(学号,姓名,成绩)的的顺序表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据... -
数据结构实验报告(一)学生信息管理系统
2020-01-12 10:58:03大二计算机学生报告的汇总 进入计算机专业以来每天的必要工作就是写报告,按照老师的话来说,我们计算机专业的...学生信息管理系统 代码区 代码说明:此代码所运用的软件是ios系统的x-code #include <stdio.h... -
C语言课设:学生信息管理系统设计
2020-11-04 08:38:15学生信息管理系统设计 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail 等。试设计一学生 信息管理系统,使之能提供以下功能: 系统以菜单方式工作 学生信息录入功能(学生信息用文件保存)—... -
C++ 学生信息管理系统课程设计报告
2020-06-13 11:22:27《面向对象课程设计》报告学生信息管理系统设计一、问题描述二、需求分析和概要设计三、功能模块描述和设计思路四、具体实现过程五、收获与展望 一、问题描述 学生信息管理系统设计 学生信息包括:学号,姓名,年龄... -
学生信息标准管理系统详细设计.doc
2020-10-20 12:30:14学生信息管理系统 具体设计 课程名称软件工程 指导老师冯 年 荣 组 员岳一沿朱隆君张敏 张雨 邵天宇万文彬 20XX/5/1 具体设计概述 具体设计也叫做程序设计它不一样于编码或编制程序在具体设计阶段要决定各个模块实现... -
学生信息管理学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-...设计“学生信息管理系统”
2010-12-23 11:14:34设计“学生信息管理系统”,使之能提供以下功能: 1)系统以菜单方式工作; 2)学生信息录入功能; 3)学生信息浏览功能; 4)查询、排序功能:按学号查询、按姓名查询; 5)学生信息的删除与修改。 -
基于access的学生管理信息系统.doc
2022-07-17 10:42:35基于access的学生管理信息系统.doc -
学生信息管理系统设计
2019-01-25 19:13:08学生信息管理系统设计 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。 试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作 学生信息录入功能(学生信息用文件保存)—... -
学生信息管理系统文档
2008-12-11 08:46:28有关学生信息管理的所有文档!包括:可行性研究报告、需求规格说明书、概要设计说明书、详细设计说明书、软件测试计划及用户使用手册等等。是学生信息管理系统的所有文档一份详细的示例!!! -
数据结构课程设计之学生宿舍信息管理系统
2020-06-21 10:14:38数据结构课程设计之学生宿舍信息管理系统,宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据... -
【记录贴】数据库课程设计——学生信息管理系统
2021-01-20 23:38:38三、总体设计(含背景知识或基本原理与算法、或模块介绍、设计步骤等) 背景知识 基本原理与算法: 模块介绍 设计步骤 四、详细设计(含主要的数据结构、程序流程图、关键代码等) 需求分析: 功能分析: 概念模型... -
Java实训项目10:GUI学生信息管理系统 - 实现步骤 - 创建数据访问接口实现类
2020-06-05 15:59:32抛出MySQLSyntaxErrorException,如下图所示: 要学会看错误提示信息,这对于我们开发程序相当重要,提示在telephone = '13845456780’附近存在MySQL句法错误,因此,我们要去看源码进行调试,解决这个错误。... -
数据结构-学生成绩管理系统
2021-02-27 19:21:17学生信息的录入、查询、修改、排序、按学生成绩确定名次以及信息的输出。 其中学生信息包含:学号、姓名、专业、四门课、总分以及排名; 信息修改仅对四门成绩进行修改; 信息查询可以按照学号和姓名两种查询方法... -
用顺序表实现学生信息管理系统
2019-03-30 15:32:34用顺序表实现学生信息管理系统 问题描述: 定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据... -
学生成绩管理系统设计
2022-02-21 15:17:43关于学生管理系统的一个实验 -
C++模板类实现学生信息管理系统
2019-10-05 16:06:33首先介绍功能:对学生信息的添加,删除,修改,搜索。 搜索分为用学号进行精确搜索,并且搜索到之后可以对其进行修改,删除。另一个是用学号外的任一项信息或者几项信息进行搜索,显示为关联度高的在前,关联度低的...