这里都是基于Windows的网络编程

这里用的方法是执行一个操作连接一次,然后操作完之后,客户端和服务器就断开连接了,进行下一步操作就得继续连接。

客户端

student.h

#pragma  once;
#include <string>
#include <iostream>using namespace std;class Student
{
public:void setStudent(int n, string nam, double s);void showStudent();friend class Teacher;private:int num;char name[32];double score;
};

teacher.h

#pragma once
#include <string>
#include <iostream>
#include "student.h"using namespace std;const int upNum = 1000;class Teacher
{
public:Teacher();virtual    ~Teacher();void work();void displayStudent();void insert();void deleteStudent();void searchStudent();void saveStudent();
private:int N;//用户数目Student students[upNum];//student()
};class StudentOperation
{
public:int type;Student student;
};class StudentResult
{
public:int type;int result;int memo;
};int pass();
int chooseInMenu();
int inputPassword();

main.cpp

#include <iostream>
#include <WinSock2.h>
#include "teacher.h"
#pragma comment(lib, "ws2_32.lib")using namespace std;int main()
{cout << "*************************************" << endl;cout << "*         学生成绩管理系统          *" << endl;cout << "*************************************" << endl;Teacher t;t.work();system("pause");return 0;
}

work.cpp

#include "student.h"
#include "teacher.h"
#include <iostream>
#include <fstream>
#include <WinSock2.h>//student funcation
void Student::showStudent()
{cout << num << "          " << name << "        " << endl;
}//teacher funcation
Teacher::Teacher()
{}Teacher::~Teacher()
{
}void Teacher::work()
{int ichoice;int j = 0;while (1){ichoice = chooseInMenu();switch(ichoice){case 1: insert(); break;case 2: deleteStudent(); break;case 3: searchStudent(); break;case 4: displayStudent(); break;case 0: { system("pause");exit(1);}default:  break;}}
}void Teacher::insert()
{StudentOperation stuop;stuop.type = 1;cout << "请输入学号: ";cin >> stuop.student.num;cout << endl;cout << "请输入名字: ";cin >> stuop.student.name;cout << endl;cout << "请输入操作系统成绩: ";cin >> stuop.student.score;WSADATA wsaData;int ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败" << endl;system("pause");exit(1);}SOCKET clientsocket;clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(clientsocket == INVALID_SOCKET){cout << "创建winsocket失败" << endl;system("pause");exit(1);}struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = connect(clientsocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret ==  SOCKET_ERROR){cout << "连接失败" << endl;system("pause");exit(1);}char * data = (char *)&stuop;int len = send(clientsocket, data, sizeof(stuop), 0);if (len == SOCKET_ERROR){cout << "发送失败" << endl;system("pause");exit(1);}StudentResult sr;len = recv(clientsocket, (char *)&sr, sizeof(sr), 0);if(len == SOCKET_ERROR){cout << "接收失败" << endl;system("pause");exit(1);}//cout << sr.result << endl;closesocket(clientsocket);WSACleanup();
}void Teacher::deleteStudent()
{StudentOperation stuop;stuop.type = 2;cout << "请输入学号:";cin >> stuop.student.num;cout << endl;WSADATA wsaData;int ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败" << endl;system("pause");exit(1);}SOCKET clientsocket;clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(clientsocket == INVALID_SOCKET){cout << "创建winsocket失败" << endl;system("pause");exit(1);}struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = connect(clientsocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret ==  SOCKET_ERROR){cout << "连接失败" << endl;system("pause");exit(1);}char * data = (char *)&stuop;int len = send(clientsocket, data, sizeof(stuop), 0);if(len == SOCKET_ERROR){cout << "发送失败" << endl;system("pause");exit(1);}StudentResult st;len = recv(clientsocket, (char *)&st, sizeof(st), 0);if(len == SOCKET_ERROR){cout << "接收失败" << endl;system("pause");exit(1);}//cout << st.result << endl;closesocket(clientsocket);WSACleanup();
}void Teacher::searchStudent(){StudentOperation stuop;stuop.type = 3;cout << "请输入要修改的同学的学号:";cin >> stuop.student.num;WSADATA wsaData;int ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败" << endl;system("pause");exit(1);}SOCKET clientsocket;clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(clientsocket == INVALID_SOCKET){cout << "创建winsocket失败" << endl;system("pause");exit(1);}struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = connect(clientsocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret ==  SOCKET_ERROR){cout << "连接失败" << endl;system("pause");exit(1);}char * data = (char *)&stuop;ret = send(clientsocket, data, sizeof(stuop), 0);if(ret == SOCKET_ERROR){cout << "发送失败" << endl;system("pause");exit(1);}StudentResult st;ret = recv(clientsocket, (char *)&st, sizeof(st), 0);if(ret == SOCKET_ERROR){cout << "接收失败" << endl;system("pause");exit(1);}// cout << st.result << endl;closesocket(clientsocket);WSACleanup();cout << "请输入你要修改的成绩: ";cin >> stuop.student.score;ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败" << endl;system("pause");exit(1);}clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(clientsocket == INVALID_SOCKET){cout << "创建winsocket失败" << endl;system("pause");exit(1);}serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = connect(clientsocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret ==  SOCKET_ERROR){cout << "连接失败" << endl;system("pause");exit(1);}ret = send(clientsocket, data, sizeof(stuop), 0);if(ret == SOCKET_ERROR){cout << "发送失败" << endl;system("pause");exit(1);}StudentResult sr;ret = recv(clientsocket, (char *)&sr, sizeof(sr), 0);if(ret == SOCKET_ERROR){cout << "接收失败" << endl;system("pause");exit(1);}else{cout << "修改信息成功" << endl;}closesocket(clientsocket);WSACleanup();}void Teacher::displayStudent(){StudentOperation stuop;stuop.type = 4;WSADATA wsaData;int ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败" << endl;system("pause");exit(1);}SOCKET clientsocket;clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(clientsocket == INVALID_SOCKET){cout << "创建winsocket失败" << endl;system("pause");exit(1);}struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = connect(clientsocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret ==  SOCKET_ERROR){cout << "连接失败" << endl;system("pause");exit(1);}char *data = (char *)&stuop;ret = send(clientsocket, data, sizeof(stuop),0);if(ret ==  SOCKET_ERROR){cout << "发送失败" << endl;system("pause");exit(1);}StudentResult st;ret = recv(clientsocket, (char *)&st, sizeof(st), 0);if(ret == SOCKET_ERROR){cout << "接收失败" << endl;system("pause");exit(1);}//cout << st.result << endl;closesocket(clientsocket);WSACleanup();ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败" << endl;system("pause");exit(1);}clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(clientsocket == INVALID_SOCKET){cout << "创建winsocket失败" << endl;system("pause");exit(1);}serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = connect(clientsocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret ==  SOCKET_ERROR){cout << "连接失败" << endl;system("pause");exit(1);}while (recv(clientsocket, (char*)&stuop, sizeof(stuop), 0)){cout << "number :" << stuop.student.num << ", name : " << stuop.student.name << ", score : " << stuop.student.score << endl;}closesocket(clientsocket);WSACleanup();}int chooseInMenu()
{int i;while (1){cout << endl;cout << "+------------------------------------+" << endl;cout << "+      1.插入信息        2.删除信息    +" << endl;cout << "+      3.修改信息        4.显示信息    +" << endl;cout << "+-------------------------------------+" << endl;cout << "+                       0.退出        +" << endl;cout << "+------------------------------------+" << endl;cout << "请输入操作指令:";cin >> i;if (i >= 0 && i <= 9)break;elsecout << "请重新输入" << endl;}return i;
}

服务器

student.h

#pragma once
#include <string>
#include <iostream>using namespace std;class Student
{
public:int num;char name[32];double score;
};

main.cpp

#include <iostream>
#include <WinSock2.h>
#include <fstream>
#include <vector>
#include <list>
#include "student.h"
#include "studentku.h"#pragma comment(lib, "ws2_32.lib")using namespace std;class StudentOperation
{
public:int type;Student student;
};class StudentResult
{
public:int type;int result;int memo;
};StudentOperation recvStudent();list<Student> stulist;
int main()
{vector<Student> stulist;while (true){try{StudentOperation op = recvStudent();if(op.type == 1){stulist.push_back(op.student);}else if(op.type == 2){cout << "删除学号为:" << op.student.num << endl;for(vector<Student>::iterator it = stulist.begin(); it != stulist.end(); it++){if(it->num == op.student.num){stulist.erase(it, it+1);break;}}}else if(op.type == 3){cout << "修改的学生的学号为:" << op.student.num << endl;vector<Student>::iterator it;for(it = stulist.begin(); it != stulist.end(); it++){if(it->num == op.student.num){break;}}WSADATA wsaData;StudentOperation op;op.type = 3;int ret;ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败, 错误编号为" << ret << endl;break;}SOCKET serversocket;serversocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(serversocket == INVALID_SOCKET){cout << "winsock建立失败"  << WSAGetLastError() << endl;system("pause");break;}struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = bind(serversocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret == SOCKET_ERROR){cout << "绑定失败" << WSAGetLastError() << endl;system("pause");break;}ret = listen(serversocket, 5);if(ret == SOCKET_ERROR){cout << "监听失败" << WSAGetLastError() << endl;system("pause");break;}struct sockaddr_in clientaddr;int length = sizeof(clientaddr);SOCKET acceptsocket = accept(serversocket, (struct sockaddr*)&clientaddr, &length);if(acceptsocket == INVALID_SOCKET){cout << "接受失败" << WSAGetLastError() << endl;system("pause");break;}int count = recv(acceptsocket, (char *)&op, sizeof(op), 0);if(count == SOCKET_ERROR){cout << "接收失败" << endl;system("pause");break;}StudentResult sr;char *data =(char *)&sr;it->score = op.student.score;sr.result = 0;count = send(acceptsocket, data, sizeof(sr), 0);if(count == SOCKET_ERROR){cout << "发送失败" << endl;system("pause");break;}closesocket(serversocket);closesocket(acceptsocket);WSACleanup();}else if(op.type == 4){WSADATA wsaData;StudentOperation op;op.type = 4;int ret;ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败, 错误编号为" << ret << endl;break;}SOCKET serversocket;serversocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(serversocket == INVALID_SOCKET){cout << "winsock建立失败"  << WSAGetLastError() << endl;system("pause");break;}struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = bind(serversocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret == SOCKET_ERROR){cout << "绑定失败" << WSAGetLastError() << endl;system("pause");break;}ret = listen(serversocket, 5);if(ret == SOCKET_ERROR){cout << "监听失败" << WSAGetLastError() << endl;system("pause");break;}struct sockaddr_in clientaddr;int length = sizeof(clientaddr);SOCKET acceptsocket = accept(serversocket, (struct sockaddr*)&clientaddr, &length);if(acceptsocket == INVALID_SOCKET){cout << "接受失败" << WSAGetLastError() << endl;system("pause");break;}vector<Student>::iterator it;for(it = stulist.begin(); it != stulist.end(); it++){strcpy(op.student.name, it->name);op.student.num = it->num;op.student.score = it->score;ret = send(acceptsocket, (char *)&op, sizeof(op), 0);if(ret == SOCKET_ERROR){cout << "发送失败" << endl;system("pause");break;}}closesocket(serversocket);closesocket(acceptsocket);WSACleanup();}if(op.type != 4){fstream fs("i:\\code\\teachernet.txt", ios::out);for(vector<Student>::iterator it = stulist.begin(); it != stulist.end(); it++){fs << it->num << "\t" << it->name << "\t" << it->score << endl;}fs.close();}}catch(...){cout << "error" << endl;system("pause");return -1;}}system("pause");return 0;
}StudentOperation recvStudent()
{WSADATA wsaData;StudentOperation op;op.type = 1;int ret;ret = WSAStartup(MAKEWORD(2,2), &wsaData);if(ret != 0){cout << "win初始化失败, 错误编号为" << ret << endl;return op;}SOCKET serversocket;serversocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(serversocket == INVALID_SOCKET){cout << "winsock建立失败"  << WSAGetLastError() << endl;system("pause");return op;}struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");serveraddr.sin_port = htons(6800);ret = bind(serversocket, (struct sockaddr*)&serveraddr, sizeof(serveraddr));if(ret == SOCKET_ERROR){cout << "绑定失败" << WSAGetLastError() << endl;system("pause");return op;}ret = listen(serversocket, 5);if(ret == SOCKET_ERROR){cout << "监听失败" << WSAGetLastError() << endl;system("pause");return op;}struct sockaddr_in clientaddr;int length = sizeof(clientaddr);SOCKET acceptsocket = accept(serversocket, (struct sockaddr*)&clientaddr, &length);if(acceptsocket == INVALID_SOCKET){cout << "接受失败" << WSAGetLastError() << endl;system("pause");return op;}int count = recv(acceptsocket, (char *)&op, sizeof(op), 0);if(count == SOCKET_ERROR){cout << "接收失败" << endl;system("pause");return op;}StudentResult sr;sr.type = op.type;if(op.type < 1 || op.type > 4){sr.result = -1;}sr.result = 0;count = send(acceptsocket, (char *)&sr, sizeof(sr), 0);if(count == SOCKET_ERROR){cout << "发送失败" << endl;system("pause");return op;}closesocket(acceptsocket);closesocket(serversocket);return op;
}

学生管理系统--网络版相关推荐

  1. 针对学生的计算机管理软件,计算机软件在高校学生管理系统中的应用

    摘要:随着时代的发展,计算机技术已成为各行各业不可或缺的技术.信息技术的应用与普及为高校学生管理工作也创造了新的平台.对学生的生活.思想.学习.工作等都产生了越来越深的影响.计算机软件在高校学生管理工 ...

  2. 用python设计学生管理系统_python+tkinter实现学生管理系统

    本文实例为大家分享了python+tkinter实现学生管理系统的具体代码,供大家参考,具体内容如下 from tkinter import * from tkinter.messagebox imp ...

  3. python删除字典中性别为男_python初学者,用python3实现基本的学生管理系统代码实例...

    本篇文章主要分享python学生管理系统的使用,文章非常详细地介绍了通过示例代码实现的学生管理系统,该系统对每个人的研究或工作都有一定的参考学习价值,希望你能在其中有所收获. 这个是用python实现 ...

  4. 学生管理系统(C语言版)

    学生管理系统 这个是大一学习C语言的时候做的一个小项目,代码部分基本都是自己一人完成,没用到什么高大上的技术,在图形化方面用了EasyX(一个C++的图形库),其他都是C语言的基础内容. 项目介绍 项 ...

  5. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)

    本文上接用JDBC写一个学生管理系统(添加.删除.修改.查询学生信息) 这次主要是对上一文中的查询方法做一下调整,用创建内部类的方法来实现学生信息的查询. 我们先要定义一个接口IRowMapper: ...

  6. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)

    首先需要用Navicat Premium创建一个student表 用Java连接好MySQL数据库(需要copy一个mysql-connector-java-5.1.44-bin.jar包,该包可在网 ...

  7. python大作业 学生管理系统 以Excel(xls)格式导入文件

    简单的说一下每个板块的作用 这个load函数,是导入进来文件的数据 def load():data=xlrd.open_workbook('data.xls')table=data.sheets()[ ...

  8. JAVA入门到精通-第73讲-学生管理系统5-dao.sqlhelper

    -Model2模式 如果数据模型会很多,怎么办? 处理业务逻辑的:Model层 后台又分为:处理业务逻辑和对数据库的操作DAO-data access object -决定,再抽象一层出来:数据模型: ...

  9. java管理系统用怎么框架做_java 使用servlet做学生管理系统(无框架)

    使用工具: JavaJDK1.8 32位 Tomcat 8.5.33 32位 IDEA MySQL5.6 使用Jar包: c3p0-0.9.1.2.jar commons-dbutils-1.4.ja ...

最新文章

  1. Java_压缩与解压工具类
  2. MATLAB中导入数据:importdata函数
  3. Springboot+vue前后端分离考试系统
  4. Windows CE Notification API的使用方法
  5. 生成UUID作为主键
  6. C++LU decomposition(LU分解)的实现算法(附完整源码)
  7. 前端学习(1862)vue之电商管理系统电商系统之绘制默认头像
  8. 数据结构四——散列表(下)
  9. 【jQuery笔记Part1】02-jQuery代码风格
  10. Ubuntu apt-get update 失败【转】
  11. JavaScript在一个数组中插入另一个数组
  12. devc运行窗口不显示_编写Qt多窗口程序
  13. 分形理论与波动理论研究
  14. 人工智能导论——逻辑推理
  15. 华为设备VRRP多VLAN负载分担
  16. 利用beef盗取浏览器cookie,并实现页面跳转
  17. 猿圈 题库_猿圈帮企业“测评”程序员
  18. python基础第二课(小白piao分享)
  19. 华为模拟器eNSP安装初体验
  20. Datawhale-机器学习算法-Task3 EM算法

热门文章

  1. Linux MySQL语句大全
  2. c++中for_each用法简单概述
  3. 重复执行——循环结构
  4. 如何明晰定位与责任_找准定位 明晰责任 激发活力 发挥作用
  5. 设计模式学习:策略模式
  6. 入门图像处理与图像识别的知识框架
  7. lis系统ack应答格式
  8. 邮件 查看html源码,程序员跟着大师源码学习系列之2:查看网页和电子邮件的源码...
  9. 基于arduino制作农业大棚监控系统(采集)
  10. 【FPGA ZYNQ Ultrascale+ MPSOC教程】33.BRAM实现PS与PL交互