ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:43.52KB ,
资源ID:7083040      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7083040.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(详细设计说明书草稿.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

详细设计说明书草稿.docx

1、详细设计说明书草稿课表查询系统详细设计说明书项目名称:课表查询系统指导老师:穆海伦第一作者:吴灶民13055235小组成员:陈路13055310 杨维东13055237李晨阳 13055318完成日期:2016/7/12界面设计教师端界面实现的功能有:1.教师登录2.选课信息的添加和删除3.特定学生课表查询4.所有课程信息查询5.某一课程选课人数6.统计某一学生的所有选课信息7.统计某一课程的所有学生信息学生端界面实现的功能有:1.学生登录2.学生个人课表查询数据包的结构体及各种宏定义#define PKT_LOGIN_1 1#define PKT_LOGIN_2 2#define PKT_L

2、OGINREPLY 3#define PKT_STUDENT_SEARCH 4#define PKT_STUDENT_REPLY 5#define PKT_ADD 6#define PKT_DELETE 7#define PKT_ADD_REPLY 8#define PKT_DELETE_REPLY 9#define PKT_COUNT 10#define PKT_COUNT_REPLY 11#define PKT_SHOW 12#define PKT_SHOW_REPLY 13#define PKT_COURSE_STUDENT 14#define PKT_COURSE_STUDENT_RE

3、PLY 15#define PKT_STUDENT_TABLE 16#define PKT_STUDENT_TABLE_REPLY 17typedefstruct Course char Cno10; char Cname10; char Ctype10; double credit; char TeacherName10; char Ctime50; char Cplace10; int Cyear; int Cterm; int Chour;Course;typedefstruct CourseTable char Cname10; char Ctime50; char TeacherNa

4、me10; char Cplace10; int time; int week;CourseTable;typedefstruct PktHeader int pktType;PktHeader;typedefstruct LoginPkt_1/学生端登陆包 PktHeader header; int SNo; char password20;LoginPkt_1;typedefstruct LoginPkt_2/教务端登录包 PktHeader header; int TNo; char password20;LoginPkt_2;typedefstruct LoginReplyPkt/登陆

5、对应 PktHeader header; int ret;LoginReplyPkt;typedefstruct StudentSearchPkt/学生端课表查询请求 PktHeader header; int SNo; int year; int term;StudentSearchPkt;typedefstruct StudentReplyPkt/学生端课表查询回应 PktHeader header; Course course;StudentReplyPkt;typedefstruct AddPkt/教务端课表信息添加 PktHeader header; int SNo; char CN

6、o10;/修改处AddPkt;typedefstruct DeletePkt/教务端课表信息删除 PktHeader header; int SNo; char CNo10;/修改处DeletePkt;/typedefstruct AddReplyPkt PktHeader header; int is_success;AddReply;typedefstruct DeleteReplyPkt PktHeader header; int is_success;DeleteReplyPkt;/教务端课表查询请求和回应包typedefstruct CountPkt PktHeader header

7、; char Cno10; int Sno;CountPkt;typedefstruct CountReplyPkt PktHeader header; int num; int is_success;CountReplyPkt;/教务端统计请求和回应包typedefstruct ShowPkt PktHeader header;ShowPkt;typedefstruct ShowReplyPkt PktHeader header; Course course;ShowReplyPkt;typedefstruct CourseStudentPkt PktHeader header; char

8、CNo10;CourseStudentReply;typedefstruct CourseStudentReplyPkt PktHeader header; char CNo10; char CName10; int SNo; char SName10; int is_success;CourseStudentReplyPkt;typedefstruct StudentTablePkt PktHeader header; int SNo; int year; int term;StudentTablePkt;typedefstruct StudentTableReplyPkt PktHeade

9、r header; Course course;StudentTableReplyPkt;功能实现登录功能:使用socket套接字也服务器建立UDP连接 WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); m_hSocket = socket(AF_INET, SOCK_DGRAM, 0); memset(&m_srvAddr, 0, sizeof(struct sockaddr_in); m_srvAddr.sin_family = AF_INET; m_srvAddr.sin_addr.s_addr = inet_addr(LPCTS

10、TR)192.168.1.103); m_srvAddr.sin_port = htons(8888);约定使用8888端口将登录信息发送给服务器 sendto(m_hSocket, (char*)(&pkt), 8+strlen(pkt.password), 0,(struct sockaddr*)(&m_srvAddr), sizeof(sockaddr_in);接收服务器端的反馈信息,判定是否为合法用户 recvfrom(m_hSocket, recvbuff, sizeof(recvbuff), 0,(struct sockaddr*)(&m_srvAddr), &len); 添加修改

11、功能收集输入框中的信息并发送给服务器端 AddPkt pkt; pkt.header.pktType = PKT_ADD; pkt.SNo = SNo; strcpy(pkt.CNo, (LPCTSTR)CNo); sendto(m_hSocket, (char*)(&pkt), 8+strlen(pkt.CNo), 0,(struct sockaddr*)(&m_srvAddr), sizeof(sockaddr_in);接收服务器的反馈信息,判定是否添加成功 recvfrom(m_hSocket, recvbuff, sizeof(recvbuff), 0,(struct sockaddr

12、*)(&m_srvAddr), &len);查询功能收集输入框中的信息并发送给服务器端 CountPkt pkt; pkt.header.pktType = PKT_COUNT; pkt.Sno = SNo_Search; strcpy(pkt.Cno, (LPCTSTR)CNo_Search); sendto(m_hSocket, (char*)(&pkt), sizeof(CountPkt), 0,(struct sockaddr*)(&m_srvAddr), sizeof(sockaddr_in);接收服务器的反馈信息,把反馈回来的信息分情况处理在界面呈现 recvfrom(m_hSoc

13、ket, recvbuff, sizeof(recvbuff), 0,(struct sockaddr*)(&m_srvAddr), &len); CountReplyPkt* pkt2 = (CountReplyPkt*)recvbuff;统计选课人数 if(strlen(LPCTSTR)CNo_Search) != 0) AppendMsg(rn); AppendMsg(人选); char k10=0; itoa(pkt2-num, k, 10); AppendMsg(k); AppendMsg(有); AppendMsg(CNo_Search); AppendMsg(课程); Appen

14、dMsg(rn); 统计某一个学生选课数量 if(SNo_Search != 0) AppendMsg(rn); AppendMsg(门课); char k10=0; itoa(pkt2-num, k, 10); AppendMsg(k); AppendMsg(选了); char d10=0; itoa(SNo_Search, d, 10); AppendMsg(d); AppendMsg(学生); AppendMsg(rn); 查询课程信息if(pkt2-header.pktType = PKT_SHOW_REPLY) char str10; sprintf(str, %f, pkt2-co

15、urse.credit); AppendMsg(rn); char k10=0; itoa(pkt2-course.Chour, k,10); AppendMsg(k); AppendMsg(每周学时:); AppendMsg(); char d10=0; itoa(pkt2-course.Cterm, d, 10); AppendMsg(d); AppendMsg(学期:); AppendMsg(); char m10=0; itoa(pkt2-course.Cyear, m, 10); AppendMsg(m); AppendMsg(学年:); AppendMsg(); AppendMsg

16、(pkt2-course.Cplace); AppendMsg(); AppendMsg(pkt2-course.Ctime); AppendMsg(); AppendMsg(pkt2-course.TeacherName); AppendMsg(); AppendMsg(str); AppendMsg(学分:); AppendMsg(); AppendMsg(pkt2-course.Ctype); AppendMsg(); AppendMsg(pkt2-course.Cno); AppendMsg(); AppendMsg(课程号:); AppendMsg(pkt2-course.Cname

17、); 服务器端功能实现在服务器端开启时加载已有的用户信息bool LoadDB(constchar* DBName);判定客户端发送的登录信息是否合法bool IsValidUser(constint name, constchar* password);学生查询功能实现void StudentSearch(constint SNo,constint year,constint term,SOCKET s, StudentReplyPkt pkt,struct sockaddr* clientAddr);添加选课信息void AddStudentCourse(constint SNo,cons

18、tchar CNo10,SOCKET s, AddReplyPkt pkt,struct sockaddr* clientAddr);删除选课信息void DeleteStudentCourse(constint SNo,constchar CNo10,SOCKET s, DeleteReplyPkt pkt,struct sockaddr* clientAddr);统计人数void Count(constint SNo,constchar CNo10,SOCKET s, CountReplyPkt pkt,struct sockaddr* clientAddr);查询个人课表void Stu

19、dentTable(constint SNo,constint year,constint term,SOCKET s, StudentTableReplyPkt pkt,struct sockaddr* clientAddr);查询某一课程的学生信息void CourseStudent(constchar CNo10,SOCKET s, CourseStudentReplyPkt pkt,struct sockaddr* clientAddr);接收来自客户端数据包,分析其需要的服务并调用相应的功能函数void ProcessPkt(constchar* recvBuff, SOCKET s

20、, struct sockaddr* clientAddr); int main(int argc, char* argv) LoadDB(SchoolSystem); 用户信息初始化 WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), & wsaData); SOCKET sListen = socket(AF_INET, SOCK_DGRAM, 0); 创建socket sockaddr_in local; 创建本地实体 memset(&local, 0, sizeof(local);local.sin_family = AF_INET; local.s

21、in_addr.s_addr = INADDR_ANY; local.sin_port = htons(u_short)8888); 循环接收数据包 while(true) int ret = recvfrom(sListen, recvBuff, sizeof(recvBuff), 0, (struct sockaddr*)&clientAddr, &clientAddrLen); ProcessPkt(recvBuff, sListen, (struct sockaddr*)&clientAddr); closesocket(sListen); 退出时关闭socket return 0;v

22、oid ProcessPkt(constchar* recvBuff, SOCKET s, struct sockaddr* clientAddr) int pktType = (PktHeader*)recvBuff)-pktType; 对数据进行识别当类型为学生登录if(pktType = PKT_LOGIN_1) LoginPkt_1* pkt = (LoginPkt_1*)recvBuff; if(!IsValidUser(pkt-SNo, pkt-password) 判定是否合法 LoginReplyPkt reply; reply.header.pktType = PKT_LOGI

23、NREPLY; reply.ret = 0;/ 0 failure; 1 success sendto(s, (char*)(&reply), 8, 0, clientAddr, sizeof(struct sockaddr); return; else LoginReplyPkt reply; reply.header.pktType = PKT_LOGINREPLY; reply.ret = 1;/ 0 failure; 1 success ; sendto(s, (char*)(&reply), 8, 0, clientAddr, sizeof(struct sockaddr); 当类型

24、为教师登录 elseif(pktType = PKT_LOGIN_2) LoginPkt_2* pkt = (LoginPkt_2*)recvBuff; int Tno=10000; char Tpassword20=123456; if(pkt-TNo != Tno | strcmp(pkt-password, Tpassword)!= 0) LoginReplyPkt reply; reply.header.pktType = PKT_LOGINREPLY; reply.ret = 0;/ 0 failure; 1 success sendto(s, (char*)(&reply), 8,

25、 0, clientAddr, sizeof(struct sockaddr); return; else LoginReplyPkt reply; reply.header.pktType = PKT_LOGINREPLY; reply.ret = 1;/ 0 failure; 1 success ; sendto(s, (char*)(&reply), 8, 0, clientAddr, sizeof(struct sockaddr); 当类型为学生查询 elseif(pktType = PKT_STUDENT_SEARCH) StudentSearchPkt* pkt = (Studen

26、tSearchPkt*)recvBuff; StudentReplyPkt studentreplypkt=0; studentreplypkt.header.pktType = PKT_STUDENT_REPLY; StudentSearch(pkt-SNo,pkt-year,pkt-term,s,studentreplypkt,clientAddr); 当类型为选课添加 elseif(pktType = PKT_ADD) AddPkt* pkt = (AddPkt*)recvBuff; AddReplyPkt addreplypkt=0; addreplypkt.header.pktTyp

27、e = PKT_ADD_REPLY; AddStudentCourse(pkt-SNo,pkt-CNo,s,addreplypkt,clientAddr); 当类型为选课删除 elseif(pktType = PKT_DELETE) DeletePkt* pkt = (DeletePkt*)recvBuff; DeleteReplyPkt deletereplypkt=0; deletereplypkt.header.pktType = PKT_DELETE_REPLY; DeleteStudentCourse(pkt-SNo,pkt-CNo,s,deletereplypkt,clientAd

28、dr); 当类型为统计 elseif(pktType = PKT_COUNT) CountPkt* pkt = (CountPkt*)recvBuff; CountReplyPkt countreplypkt=0; countreplypkt.header.pktType = PKT_COUNT_REPLY; Count(pkt-SNo,pkt-CNo,s,countreplypkt,clientAddr); 当类型为课程查询 elseif(pktType = PKT_SHOW) ShowPkt* pkt =(ShowPkt*)recvBuff; ShowReplyPkt showreplypkt=0; sh

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1