学生考勤管理系统设计

news/2024/2/29 17:30:30/文章来源:https://blog.csdn.net/liaochonxiang/article/details/135591832

实验要求

题目 “学生考勤管理系统设计

1、问题描述

学生信息包括:学号、姓名、性别、年龄、班级等信息。

考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。

2、功能要求

(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。

(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。

(3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。

(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。

(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。

(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。

(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。

(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。

3、问题的解决方案

根据系统功能要求,可以将问题解决分为以下步骤:

(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

(2)分析系统中的各个实体及它们之间的关系;

(3)根据问题描述,设计系统的类层次;

(4)完成类层次中各个类的描述;

(5)完成类中各个成员函数的定义;

(6)完成系统的应用模块;

(7)功能调试;

(8)完成系统总结报告。

代码实验

Students.h

#pragma once
#include<string>
#include<iostream>
#include<fstream>
#include <windows.h>
using namespace std;
typedef class Students
{
public:Students();Students(int, string, string, int, string);//Students(int i, string n, string s, int a, string c) :id(i), name(n), sex(s), age(a), clbum(c) {};void add_student();void show_student();void edit_student();int get_id();
protected:int id;//学号string name;//姓名string sex;//性别int age;//年龄string clbum;//班级
}Stu;
typedef class Attendances : public Students
{
public:Attendances();Attendances(string, string, string, string);Attendances(int i, string n, string s, int a, string c, string d, string p, string cc, string t) :Students(i, n, s, a, c) {date = d;period = p;course = cc;type = t;}void add_attendance();void show_attendance();string get_period();string get_name();string get_course();bool flag = true;
private:string date;//缺课日期string period;//第几节课string course;//课程名称string type;//缺课类型
}Att;
typedef struct Node
{Stu s;Att a;Node* next;
}LNode,*Linklist;
void menu();
void init_list();
void clear_buffer();
void add_student();
void add_attendance();
void query_student();
void query_attendance();
void show_all();
void edit_student();
void delete_student();
void count_absent_period();
void count_absent_name();
void save_data();
void load_data();

main.cpp

#pragma once
#include"Students.h"
using namespace std;int main()
{init_list();load_data();menu();
}

Students.cpp

#pragma once
#include"Students.h"
Linklist head;
Students::Students()
{id = NULL;name = "NULL";sex = "NULL";age = NULL;clbum = "NULL";
}
Students::Students(int i, string n, string s, int a, string c) {id = i;name = n;sex = s;age = a;clbum = c;
}
Attendances::Attendances()
{date = "NULL";period = "NULL";course = "NULL";type = "NULL";
}
Attendances::Attendances(string d, string p, string c, string t)
{date = d;period = p;course = c;type = t;
}
void Students::add_student() 
{cout << "请输入学号:";cin >> id;cout << "\n请输入姓名:";cin >> name;cout << "\n请输入性别:";cin >> sex;cout << "\n请输入年龄:";cin >> age;cout << "\n请输入班级:";cin >> clbum;cout << endl;
}
void Students::show_student()
{cout << id << '\t' << name << '\t' << sex << '\t' << age << '\t' << clbum << endl;
}
void Students::edit_student()
{cout << "\n请输入姓名:";cin >> name;cout << "\n请输入性别:";cin >> sex;cout << "\n请输入年龄:";cin >> age;cout << "\n请输入班级:";cin >> clbum;
}
int Students::get_id()
{return id;
}
void Attendances::add_attendance()
{cout << "请输入缺课日期(YYYY-MM-DD):";cin >> date;cout << "\n请输入第几节课:";cin >> period;cout << "\n请输入课程名称:";cin >> course;cout << "\n请输入学生姓名:";cin >> name;cout << "\n请输入缺课类型(迟到、早退、请假、旷课):";cin >> type;cout << endl;
}
void Attendances::show_attendance()
{cout << date << "\t\t" << period << "\t\t" << course << "\t\t" <<name<<"\t\t" << type << endl;
}
string Attendances::get_period()
{return period;
}
string Attendances::get_name()
{return name;
}
string Attendances::get_course()
{return course;
}
void menu()
{char ch;while (true){cout<<("\t\t\t\t\t***************************************")<<endl;cout<<("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t菜单\t\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b1. 添加记录\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b2. 查询记录\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b3. 显示所有记录\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b4. 编辑记录\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b5. 删除记录\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b6. 统计旷课情况\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b7. 保存数据\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b8. 加载数据\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\b\b\b0. 退出程序\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout<<("\t\t\t\t\t***************************************") << endl;cout<<("\t\t\t\t\t请选择操作:");ch = getchar();clear_buffer();system("cls");switch (ch){case '1':cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t请选择添加的记录类型\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b1. 学生\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b2. 考勤\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t请选择操作:");//cout << "请选择添加的记录类型(1-学生,2-考勤):";ch = getchar();clear_buffer();system("cls");switch (ch){case '1':add_student(); break;case '2':add_attendance(); break;default:cout << "无效的选择!\n";break;}break;case '2':cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t请选择查询的记录类型\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b1. 学生\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b2. 考勤\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t请选择操作:");//cout << "请选择查询的记录类型(1-学生,2-考勤):";ch = getchar();clear_buffer();system("cls");switch (ch){case '1':query_student(); break;case '2':query_attendance(); break;default:cout << "无效的选择!\n";break;}break;case '3':show_all();break;case '4':edit_student(); break;case '5':delete_student(); break;case '6':cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t请选择统计旷课情况的类型\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b\b1. 按课程名称统计\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b\b2. 按学生姓名统计\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t请选择操作:");//cout << "请选择统计旷课情况的类型(1-按课程名称统计,2-按学生姓名统计):";ch = getchar();clear_buffer();system("cls");switch (ch){case '1':count_absent_period(); break;case '2':count_absent_name(); break;default:cout << "无效的选择!\n";break;}break;case '7':save_data();	cout << "保存成功!" << endl << endl; break;case '8':load_data(); 	cout << "加载成功!" << endl << endl; break;case '0':save_data(); cout << "退出成功!"<<endl; exit(0);default:cout << "无效的选择!\n"; exit(0);}clear_buffer();system("pause");system("cls");}
}
void init_list()
{head = new Node;head->next = NULL;
}
void clear_buffer()
{char ch;while ((ch = getchar()) != '\n' && ch != EOF);
}
void add_student()
{Linklist current,newNode = new Node;newNode->a.add_student();newNode->a.flag = false;newNode->next = NULL;while (true){if (head->next == NULL){head->next = newNode;break;}else{current = head->next;while (current->next != NULL){current = current->next;}if (current->a.get_id() == newNode->a.get_id()){cout<< "学号重复!"<<endl<<endl;break;}current->next = newNode;break;}}save_data();
}
void add_attendance()
{Linklist current, newNode = new Node;newNode->a.add_attendance();newNode->next = NULL;if (head->next == NULL){head->next = newNode;}else{current = head->next;while (current->next != NULL){current = current->next;}current->next = newNode;}save_data();
}
void query_student()
{int input = 0;int id;bool flag = false;string name;Linklist current = head->next;cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t请选择该学生的查询方式\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b1. 学号\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b2. 姓名\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t请选择操作:");//cout << "请选择该学生的查询方式:(1-学号,2-姓名):";cin >> input;system("cls");if (input == 1){cout << "请输入该学生的学号:";cin >> id;cout << endl << "学号" << '\t' << "姓名" << '\t' << "性别" << '\t' << "年龄" << '\t' << "班级" << endl;while (current != NULL){if (current->a.flag == false&&current->a.get_id()==id){current->a.show_student();flag = true;}current = current->next;}if (flag == false){cout << endl << "记录为空!" << endl;}cout << endl;}else if (input == 2){cout << "请输入该学生的姓名:";cin >> name;cout <<endl<< "学号" << '\t' << "姓名" << '\t' << "性别" << '\t' << "年龄" << '\t' << "班级" << endl;while (current != NULL){if (current->a.flag == false && current->a.get_name() == name){current->a.show_student();flag = true;}current = current->next;}if (flag == false){cout << endl << "记录为空!" << endl;}cout << endl;}else{cout << "无效的选择!"<<endl<<endl;}
}
void query_attendance()
{int input = 0;bool flag = false;string course,name;Linklist current = head->next;cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t请选择该考勤的查询方式\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b1. 课程名称\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\b\b\b2. 学生姓名\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t*|\t\t\t\t\t\b\b\b|*") << endl;cout << ("\t\t\t\t\t***************************************") << endl;cout << ("\t\t\t\t\t请选择操作:");//cout << "请选择该考勤的查询方式:(1-课程名称,2-学生姓名):";cin >> input;system("cls");if (input == 1){cout << "请输入需要查询课程名称:";cin >> course;cout <<endl<< "缺课日期" << '\t' << "第几节课" << '\t' << "课程名称" << '\t' << "学生姓名" << '\t' << "缺课类型" << endl;while (current != NULL){if (current->a.flag == true && current->a.get_course()==course){current->a.show_attendance();flag = true;}current = current->next;}if (flag == false){cout << endl << "记录为空!" << endl;}cout << endl;}else if (input == 2){cout << "请输入需要查询学生姓名:";cin >> name;cout <<endl<< "缺课日期" << '\t' << "第几节课" << '\t' << "课程名称" << '\t' << "学生姓名" << '\t' << "缺课类型" << endl;while (current != NULL){if (current->a.flag == true && current->a.get_name() == name){current->a.show_attendance();flag = true;}current = current->next;}if (flag == false){cout << endl << "记录为空!" << endl;}cout << endl;}else{cout << "无效的选择!" << endl<<endl;}
}
void show_all()
{Linklist current= head->next, current_2=head->next;cout << "\t\tStudents" << endl;cout << "---------------------------------------------" << endl;cout << "学号" << '\t' << "姓名" << '\t' << "性别" << '\t' << "年龄" << '\t' << "班级" << endl;while (current!=NULL){if (current->a.flag == false){current->a.show_student();}current = current->next;}cout << "----------------end--------------------------" << endl;cout << "**********************************************" << endl;cout << "\t\tAttendance" << endl;cout << "---------------------------------------------------------------------------" << endl;cout << "缺课日期" << '\t' << "第几节课" << '\t' << "课程名称" << '\t' << "学生姓名" << '\t' << "缺课类型" << endl;cout << "---------------------------------------------------------------------------" << endl;while (current_2 != NULL){if (current_2->a.flag==true){current_2->a.show_attendance();}current_2 = current_2->next;}cout << "----------------------------------end--------------------------------------" << endl;
}
void edit_student()
{Linklist current = head->next, current_2 = head;int id;cout << "请输入需要修改学生的学号:";cin >> id;while (current != NULL){if (current->a.get_id()==id){current->a.edit_student();}current = current->next;}cout << endl;save_data();
}
void delete_student()
{Linklist current = head->next;Linklist current_2 = head;int id;bool flag = true;cout << "请输入需要删除的学生学号:";cin >> id;while (current != NULL){if (current->a.get_id() == id){current_2->next = current->next;current = NULL;cout << endl << "删除成功!" << endl<<endl;flag = false;break;}current_2 = current;current = current->next;}if (flag == true){cout << endl << "记录为空!\n" << endl;}
}
void count_absent_period()
{Linklist current = head->next, current_2 = head;int count = 0;string period;cout << "请输入需要统计的课程名称:";cin >> period;while (current != NULL){if (current->a.get_period()==period){count++;}current = current->next;}cout << endl<< period << "共有:" << count << "条记录!" << endl<<endl;
}
void count_absent_name()
{Linklist current = head->next, current_2 = head;int count = 0;string name;cout << "请输入需要统计的学生姓名:";cin >> name;while (current != NULL){if (current->a.get_name() == name&&current->a.flag==true){count++;}current = current->next;}cout <<endl<< name << "共有:" << count << "条记录!" << endl<<endl;
}
void save_data()
{fstream f("students.dat", ios::trunc|ios::out | ios::binary);Linklist current = head->next;if (!f){cerr << "open error!" << endl;abort();}while (current!= NULL){f.write(reinterpret_cast<char*>(&current->a), sizeof(current->a));current = current->next;}f.close();
}
void load_data()
{fstream f("students.dat", ios::in | ios::binary);if (!f){cerr << "open error!" << endl;abort();}Linklist current = new Node;current->next = NULL;Linklist H = current;Linklist p=H;bool flag = true;while (f.read(reinterpret_cast<char*>(&current->a), sizeof(current->a))){flag = false;p->next = current;p = current;Linklist newNode = new Node;newNode->next = NULL;current->next = newNode;current = newNode;} delete current;p->next = NULL;if (flag){cout << "文件为空!";exit(0);}f.close();head->next= H;
}

注意点:必须先存入一个数据,id查重未完全写好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_926051.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机导论06-人机交互

文章目录 人机交互基础人机交互概述人机交互及其发展人机交互方式人机界面 新型人机交互技术显示屏技术跟踪与识别&#xff08;技术&#xff09;脑-机接口 多媒体技术多媒体技术基础多媒体的概念多媒体技术及其特性多媒体技术的应用多媒体技术发展趋势 多媒体应用技术文字&…

DataXCloud部署与配置[智数通]

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.18.130 NETMASK255.255.255.0 GATEWAY192.168.18.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

bash shell基础命令(一)

1.shell启动 shell提供了对Linux系统的交互式访问&#xff0c;通常在用户登录终端时启动。系统启动的shell程序取决于用户账户的配置。 /etc/passwd/文件包含了所有用户的基本信息配置&#xff0c; $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash ...例如上述root账户信…

多级缓存架构(二)Caffeine进程缓存

文章目录 一、引入依赖二、实现进程缓存1. 配置Config类2. 修改controller 三、运行四、测试 通过本文章&#xff0c;可以完成多级缓存架构中的进程缓存。 一、引入依赖 在item-service中引入caffeine依赖 <dependency><groupId>com.github.ben-manes.caffeine…

热门护眼台灯深度测评,飞利浦、米家、书客护眼灯哪家强?

或许大家已经留意到了&#xff0c;如今佩戴眼镜的儿童越来越多&#xff0c;近视的发生呈现出越来越低龄化的趋势。这一现象与电子设备的广泛应用密切相关。除了天生的近视倾向和频繁使用电子设备外&#xff0c;我们还可能忽略了光照问题对视力的潜在影响&#xff0c;护眼台灯的…

postman自动化接口测试

背景描述 有一个项目要使用postman进行接口测试&#xff0c;接口所需参数有&#xff1a; appid: 应用标识&#xff1b;sign&#xff1a;请求签名&#xff0c;需要使用HMACSHA1加密算法计算&#xff0c;签名串是&#xff1a;{appid}${url}${stamp}&#xff1b;stamp&#xff1…

肯尼斯·里科《C和指针》第6章 指针(5)概念的练习

肯尼斯里科《C和指针》第6章 指针&#xff08;1&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;2&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;3&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;4&#xff09…

云原生分布式多模架构:华为云多模数据库 GeminiDB 架构与应用实践

文章目录 前言一、GeminiDB 总体介绍1.1、华为云数据库全景图1.2、GeminiDB 发展历程1.3、GeminiDB 全球分布情况 二、GeminiDB 云原生架构2.1、核心设计&#xff1a;存算分离&多模扩展2.2、存算分离&多模扩展核心优势2.3、高可用&#xff1a;秒级故障接管2.4、弹性扩展…

Angular系列教程之单向绑定与双向绑定

文章目录 介绍单向绑定双向绑定在自定义组件中实现双向绑定属性总结 介绍 在Angular开发中&#xff0c;数据的绑定是非常重要的概念。它允许我们将应用程序的数据与用户界面进行交互&#xff0c;实现数据的动态更新。在本文中&#xff0c;我们将探讨Angular中的两种数据绑定方…

jmeter-线程数设置为1,循环10次没问题,循环100次出现异常

一、多次尝试&#xff0c;发现出现异常的接口大致相同。 解决办法&#xff1a;在第一个出现异常的接口下添加超时时间&#xff0c;固定定时器&#xff1a;2000ms&#xff0c;再次运行就没问题了。 二、压力机自身存在的问题 1&#xff09;在网络编程中&#xff0c;特别是在短…

计算机三级(网络技术)——应用题

第一题 61.输出端口S0 &#xff08;直接连接&#xff09; RG的输出端口S0与RE的S1接口直接相连构成一个互联网段 对172.0.147.194和172.0.147.193 进行聚合 前三段相同&#xff0c;将第四段分别转换成二进制 11000001 11000010 前6位相同&#xff0c;加上前面三段 共30…

Debian(Linux)局域网共享文件-NFS

NFS (Network File system) 是一种客户端-服务器文件系统协议&#xff0c;允许多个系统或用户访问相同的共享文件夹或文件。最新版本是 NFS-V4&#xff0c;共享文件就像存储在本地一样。它提供了中央管理&#xff0c;可以使用防火墙和 Kerberos 身份验证进行保护。 本文将指导…

基于grpc-java开发的普通工程在k8s内部署多实例,如何实现客户端流量的负载均衡

文章目录 1. 前言2.实现方案要点3.具体实现步骤3.1 编写一个grpc服务端程序(详细实现步骤在此忽略&#xff0c;网上很多例子)3.2 编写grpc客户端程序&#xff0c;注意指定负载均衡策略和dns:///这个URI前缀&#xff0c;如下图所示3.3 在k8s中部署服务端和客户端3.3.1 服务端部署…

Spark---累加器和广播变量

文章目录 1.累加器实现原理2.自定义累加器3.广播变量 1.累加器实现原理 累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量&#xff0c;在Executor 端的每个 Task 都会得到这个变量的一份新的副本&#xff0c;每个 task 更新这些副本的值后&…

5个99%的人可能不知道的实用程序库!

前言 作为一名前端开发者,这些 JavaScript 库极大地提高了我的工作效率,如格式化日期、处理 URL 参数和调试移动网页。朋友们,我想和你们分享这些库。 1. 使用 “Day.js” 来格式化日期和时间 链接 作为开发者,我已经厌倦了在 JavaScript 中操作日期和时间,因为它太麻烦了。…

WDS服务企业安装Win10

计算机 操作系统 系统服务 软件安装 WDS Windows Sserver2019STD AD&#xff0c;DNS,DHCP,WDS WADK10.0 MDT2013 Update 1 Preview 1.基础配置 域控配置静态IP 域控制器&#xff1a;需要安装AD域服务&#xff0c;DHCP和DNS三个角色 默认配置 默认配置 安装完成我们将此…

微信小程序快速入门02(含案例)

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、页面导航1.…

HarmonyOS自学-Day5(使用List、Stack、RelativeContainer相关组件实现的小案例)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;小案例 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语言基础&#xff0c;非编程小白&#xff09;的 HarmonyOS自学笔记&#xff0c;此类文章笔记我会默认大家都学过前端相关的知识&#xff0c;并常常以实现相关小案例…

2024“华数杯”(A题)|放射性废水扩散|国际大学生数学建模竞赛建模解析,小鹿学长带队指引全代码文章与思路

我是小鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 完整内容可以在文章末尾领取&#xff01; 这回带大家体验一下2024“华数杯”国际大学生数学建模竞赛呀&#xff01; 此题涉及到放射性废水从日本排放…

mac快捷创建文件的方法

mac快捷创建文件的方法 在macbook的使用中&#xff0c;当我们在桌面或访达等地方使用右键时&#xff0c;可以看到新建文件夹的选项&#xff0c;却怎么也找不到创建文件的选项。这种情况有时候会带来不便。这篇文章给大家带来一个非常简单解决这个问题。 下载 在App Store中搜索…