完成Qt设计问题并给出程序 80C

设计内容:
本次大作业,要求设计一个五子棋游戏,实现两人对弈。一人执白棋,一人执黑棋。通过掷骰子,以数字大的一方先走棋,先形成5子连线者获胜。
具体功能要求如下:
1. 在画面中绘制一个14*14棋盘,风格自由
2. 通过掷骰子,决定黑白棋谁先走。(提示,通过随机函数实现)
3. 黑白棋轮流下棋,每人限时30秒,超时将放弃下子权利,由对手接着走。
4. 在线条交叉处单击鼠标,可以实现黑棋或白棋的绘制
5. 已落子处,不能反复下棋,应提醒用户该处已有棋子,提醒方式自由,如警示音等等。
6. 先形成5子连线者获得胜利,一局结束。
7. 实现用户注册功能
8. 以文件方式记录用户信息
9. 以文件方式记录用户历史胜负详情
10. 可以通过网络在不同的客户端进行对弈
11. 可以实现人与电脑的对弈
四、 设计步骤与方法
1. 分析题目要求,整理程序思路,确定程序基本结构。
2. 根据基本思路,确定输入和输出,设计各模块的算法。
3. 确定用到的所有类的描述和定义,并设计测试程序来对类进行测试。
4. 在计算机上编译程序,检验程序的可运行性。

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

能否用qt为已写好的c程序添加一个界面

我目前已经用c语言编写完成了一个检索系统,但老师觉得DOS界面不好,要求添加一个界面,我想请教各位大神,用qt是否可以

QT多进程和多线程区别

目前有一个项目,之前是VxWorks系统下Tornado开发的,一共四个任务。分别为采集数据、数据处理、串口传输、界面显示。现在要转换成Linux下用Qt开发。我现在已经用QT的多线程方式完成了整个项目,但是被要求用进程。那么问题来了: 1:请问QT的多线程是不是可以理解成Linux下的多进程? 2:如果不是,那么请问Qt下怎么进行多进程编程?进程之间的通信同步互斥什么的Qt有没有提供支持的类?还是得用Linux下的消息队列、管道、信号量什么的? 3:如果有大神有相关经验,求指导!!!

linux课程设计 自动答题系统

【课程设计选题九】自动答题系统 课程设计内容 利用 Qt Creater 等工具和 Linux 环境下随机、时间日期函数实现自动答题系统,自行 构建界面,构建简易题库,开始答题时,从题库中随机显示题目与备选答案,用户确认答案 后,自动计算出答题正确率和对正确答案的反应时间。 课程设计任务 1、实验者先要独立进行需求分析,确定任务需求; 2、根据任务需求,完成应用的功能设计; 3、根据功能设计,完成能够实现所需功能的详细设计; 4.使用 Qt Creater 等工具,实现自动答题系统的编写、调试工作; 5.将设计过程写出完整的课程设计报告,报告要求必须附上主要程序界面和程序源代码。 课程设计报告要求 课程设计必须使用规定的课程设计实验报告纸书写,并且要使用钢笔或用中性水笔,不能使 用圆珠笔。报告的内容主要围绕着设计过程展开。设计报告由封面、前言、目录、课程设计 任务书、正文、小结、参考文献,其中正文包括以下几个部分: 1.概述 这部分主要说明本课程设计的目的、任务和要求; 2.需求分析 根据任务和要求,将所作的需求分析进行清晰陈述; 3.功能设计 说明软件具备那些功能,并对这些功能和相关设计作详细的功能说明; 4.程序的设计与编制 这部分要对程序的设计进行说明,首先要对程序的总体进行说明,然后再说明各个部分 的功能;对于程序中要使用的主要数据结构要进行说明,说明各个数据项的作用;对主要的 程序代码的主要部分也要说明是如何实现的。 5.程序的测试与调试 程序代码完成后,需要对程序进行测试,看所编制的程序是否完成了设计功能,在测试 前一般要设计一下测试的方法或测试计划,由于程序比较小可以边测试边调试。 建议分两步进行,第一步对单个的功能进行调试(测试与调试),然后在对整个程序进行联 调,在调试的过程中尽量利用集成软件开放环境提供的调试功能。另外可以在你认为关键的 地方插入消息窗口来显示必要的变量是否是预期的值,以便确认程序是否正确地执行。 6.小结 主要说明设计中学到的东西和取得的经验总结; 7.附录 要求附上主要源代码,源代码要有注释。 8.参考文献

Qt中如何在连续显示的图片上叠加矩形框?

![图片说明](https://img-ask.csdn.net/upload/201612/28/1482889794_141839.png) 如上图所示,我想把自己设计的跟踪算法用Qt做成界面,大部分工作已经完成,就是在画框问题上卡住了,求各位大神帮忙解决。我是Qt新手,第一次做界面程序,现学现卖的。图中显示图片的部分用的是QLabel类,显示的是QImage图像,目前面临的主要问题是在目标初始化过程中,需要人为的画矩形框,后期在跟踪过程中,还需要将跟踪得到的矩形框叠加在原图像上,怎么实现?

64位win7安装QT5.4.0,安装很成功但是就是打不开,出现以下问题!

![图片说明](https://img-ask.csdn.net/upload/201712/06/1512541527_372905.jpg) 小白一个希望哪位大神帮忙解决下,学生感激不尽!

c++编写简单的车位管理系统代码

随着家庭购买汽车的增加,停车场车位紧张的问题越来越突出。请根据题目要求完成简单的车位管理程序。 1.停车场有若干停车位(为说明问题,假定为3个),每个位置可以存放不同种类的汽车,包括卡车Truck,客车Carriage和小轿车Car,但同一时刻一个位置只能存放0或1辆汽车。 2.管理系统模拟实际车辆停车的情况: ①停车:新来车辆时如果有空位,按顺序为该车分配停车位,并自动记录开始停车的时间(用系统的时间); ②计费:车辆开走时,输入车位编号,自动记录结束停车的时间(用系统的时间);计算出相应停车费; ③显示:显示停车场中各类车辆的信息。 ④保存 ⑤退出 3.定义描述停车场的类Park,其中有3个位置用于存放各类车辆。 4.定义基类Automobile,至少包括纯虚函数Pay用于显示车辆信息并交纳相应停车费。 5.定义派生类Truck,Carriage和Car,这些车辆除了拥有车牌号之外, Truck还拥有载重量(浮点数,单位吨)属性,Carriage还拥有乘坐人数(整数,单位座)属性,Car还拥有排气量(浮点数,单位L)属性。具体实现上述纯虚函数Pay,显示每类车辆的相应信息,并给出计价提示,其中Truck收费2元/小时,Carriage收费1.5元/小时,Car收费1元/小时。

如何用纯C++编写国际象棋程序?

编写程序,实现国际象棋游戏,要求: (1)实现国际象棋游戏的各个规则。 (2)使用图形函数生成棋盘等。 (3)用文件存储用户的进度。 (4)用户开始新游戏时,先检测是否有历史记录,有的话可以继续未完成的棋局,也可以重新开始。 (5)实现用户排名功能。

请问已完成的VTK要怎么和MFC的界面结合起来

要用MFC的界面 请问该怎么导入VTK的三维图进MFC 已经搭建过基于对话框的VTK程序 谢谢

创建一个窗口,输入你的学号、姓名,选择所在班级,完成信息填写后,点击按钮,弹出对话框,该提示框显示你的学号、姓名和班级,以及确定按钮,点击确定按钮,对话框消失;关闭窗口。

用Java创建一个窗口,输入你的学号、姓名,选择所在班级(班级以下拉列表的形式给出,共5个班,软件1--软件5),完成信息填写后,点击按钮,弹出对话框,该提示框显示你的学号、姓名和班级,以及确定按钮,点击确定按钮,对话框消失;关闭窗口。这个该怎么写?

为什么这段代码运行后显示:进程已结束,退出代码0,却没有我设计的窗口出现,求解决??

# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'jinhang.ui' # # Created by: PyQt5 UI code generator 5.13.0 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(30, 40, 71, 31)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(30, 100, 91, 21)) self.label_2.setObjectName("label_2") self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(30, 140, 61, 21)) self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(self.centralwidget) self.label_4.setGeometry(QtCore.QRect(180, 140, 61, 16)) self.label_4.setObjectName("label_4") self.label_5 = QtWidgets.QLabel(self.centralwidget) self.label_5.setGeometry(QtCore.QRect(30, 180, 51, 21)) self.label_5.setObjectName("label_5") self.label_6 = QtWidgets.QLabel(self.centralwidget) self.label_6.setGeometry(QtCore.QRect(30, 210, 71, 31)) self.label_6.setObjectName("label_6") self.label_7 = QtWidgets.QLabel(self.centralwidget) self.label_7.setGeometry(QtCore.QRect(190, 210, 71, 31)) self.label_7.setObjectName("label_7") self.label_8 = QtWidgets.QLabel(self.centralwidget) self.label_8.setGeometry(QtCore.QRect(30, 250, 71, 21)) self.label_8.setObjectName("label_8") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(80, 490, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setGeometry(QtCore.QRect(220, 490, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.textEdit = QtWidgets.QTextEdit(self.centralwidget) self.textEdit.setGeometry(QtCore.QRect(100, 40, 71, 31)) self.textEdit.setObjectName("textEdit") self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget) self.textEdit_2.setGeometry(QtCore.QRect(180, 40, 71, 31)) self.textEdit_2.setObjectName("textEdit_2") self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget) self.textEdit_3.setGeometry(QtCore.QRect(260, 40, 71, 31)) self.textEdit_3.setObjectName("textEdit_3") self.textEdit_4 = QtWidgets.QTextEdit(self.centralwidget) self.textEdit_4.setGeometry(QtCore.QRect(90, 130, 71, 31)) self.textEdit_4.setObjectName("textEdit_4") self.textEdit_5 = QtWidgets.QTextEdit(self.centralwidget) self.textEdit_5.setGeometry(QtCore.QRect(240, 130, 71, 31)) self.textEdit_5.setObjectName("textEdit_5") self.textEdit_6 = QtWidgets.QTextEdit(self.centralwidget) self.textEdit_6.setGeometry(QtCore.QRect(100, 210, 71, 31)) self.textEdit_6.setObjectName("textEdit_6") self.textEdit_7 = QtWidgets.QTextEdit(self.centralwidget) self.textEdit_7.setGeometry(QtCore.QRect(260, 210, 71, 31)) self.textEdit_7.setObjectName("textEdit_7") self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget) self.plainTextEdit.setGeometry(QtCore.QRect(380, 0, 351, 551)) self.plainTextEdit.setObjectName("plainTextEdit") self.plainTextEdit_2 = QtWidgets.QPlainTextEdit(self.centralwidget) self.plainTextEdit_2.setGeometry(QtCore.QRect(30, 270, 341, 211)) self.plainTextEdit_2.setObjectName("plainTextEdit_2") self.verticalScrollBar = QtWidgets.QScrollBar(self.centralwidget) self.verticalScrollBar.setGeometry(QtCore.QRect(710, 0, 16, 551)) self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical) self.verticalScrollBar.setObjectName("verticalScrollBar") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.label.setText(_translate("MainWindow", "aa号:")) self.label_2.setText(_translate("MainWindow", "时间段:")) self.label_3.setText(_translate("MainWindow", "开始时间:")) self.label_4.setText(_translate("MainWindow", "结束时间:")) self.label_5.setText(_translate("MainWindow", "bb段:")) self.label_6.setText(_translate("MainWindow", "开始点:")) self.label_7.setText(_translate("MainWindow", "结束点:")) self.label_8.setText(_translate("MainWindow", "分析结果:")) self.pushButton.setText(_translate("MainWindow", "清 除")) self.pushButton_2.setText(_translate("MainWindow", "开始分析")) if __name__ == "MainWindow": import sys app = QtWidgets.QApplication(sys.argv) widget = QtWidgets.QWidget() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())

CC2530-SHT1X温湿度报警器的设计

#include <ioCC2530.h> #include "ugOled9616.h" #include "LcdDisp.h" #include <stdio.h> #define uint unsigned int #define uchar unsigned char #define SHT1X_DAT P1_4 //定义数据线 #define SHT1X_DAT_DIR P1DIR //定义数据线输出寄存器 #define SHT1X_DAT_BV BV(4) //数据线位定义 #define SHT1X_SCK P1_5 //定义时钟线 #define SHT1X_SCK_DIR P1DIR //定义时钟线输出寄存器 #define SHT1X_SCK_BV BV(5) //时钟线位定义 //定义数据线输入/输出 #define SHT1X_DATA_IN st(SHT1X_DAT_DIR &= ~(SHT1X_DAT_BV);) #define SHT1X_DATA_OUT st(SHT1X_DAT_DIR |= SHT1X_DAT_BV;) //定义控制灯的端口 #define RLED P1_0 //定义LED1为P10口控制 #define YLED P1_1 //定义LED2为P11口控制 #define K1 P0_6 //P0_6 #define ON 0 #define OFF 1 uint16 sht;//读取的温湿度,浮点值 float tempsht;//转换的温度,浮点值 float humsht;//转换的湿度,浮点值 extern void SHT1X_PORT_INT(void); //SHT10 引脚初始化 extern uint8 WaitForSHT1XAck(void); //等待SHT10 确认函数 extern void SHT1X_REST(void); //SHT10 复位函数 extern void SHT1X_STAT(void); //SHT10 启动函数 extern uint8 SendToSHT1X(uint8 data); //发送数据到SHT10 函数 extern void WaitForAminit(uint16 delay); //等待转换函数 extern void SHT1X_INT(void); //SHT10 初始化函数 extern uint16 Read_SHT1X(uint8 option); //读SHT10 传感器函数 void delay(uint n); void InitKey(void);//按键初始化程序 uchar KeyScan(void); void Initial(void);//Led程序初始化 void Lcddisplay(void); void Lcddisplay(void) { char tempBuf[4]; sht = Read_SHT1X(3); sht&=0x3fff; tempsht = (float)(sht*0.01) - 39.60; sprintf( (void *)tempBuf,"%f",tempsht); LcdPutString16_8( 8,0,(uint8*)tempBuf,4,1); delay(10); char humBuf[6]; sht = Read_SHT1X(5); sht&=0x0fff; humsht = (float)(sht*0.0405) - 4 - (sht * sht * 0.000028); sprintf( (void *)humBuf,"%f",humsht); humBuf[5] = 37;//% LcdPutString16_8( 48,0,(uint8*)humBuf,6,1); delay(10); } /**************************** //按键初始化程序 *****************************/ void InitKey(void) { P0SEL &= ~0X40; P0INP |= 0x40; //上拉 P0DIR &= ~(0x01<<(6)); //按键在P06 ADC采集 } /***************************************** //读键值 *****************************************/ uchar KeyScan(void) { if(K1 == 0) //低电平有效 { delay(100); //检测到按键 if(K1 == 0) { while(!K1); //直到松开按键 return(1); } } } /***************************************** //led程序初始化 *****************************************/ void Initial(void) { P1DIR |= 0x03; //P10、P11定义为输出 RLED = 1; YLED = 1; //LED } //************************************************************************* //函数原型:void Delay(uint n) //功 能:延时 //输 入:uint n //输 出:NULL //************************************************************************* void delay(uint n) { uint tt; for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); } //************************************************************************* //函数原型:uint16 Read_SHT1X(uint8 option) //功 能:读取温湿度 //输 入:3-温度 5-湿度 //输 出:读取的温湿度,浮点值 //************************************************************************* uint16 Read_SHT1X(uint8 option) { uint16 temp = 0; uint8 i; SHT1X_STAT();//启动传感器 if(SendToSHT1X(option&0x1f) == 0) return 1;//芯片没有应答 SHT1X_DATA_IN; for(i = 0;i<10;i++)//等转换完成 WaitForAminit(30000); SHT1X_SCK = 0; NOP(); SHT1X_SCK = 1; NOP(); if(SHT1X_DAT != 0) { return 2;//芯片没有响应 转换完成 } SHT1X_SCK = 0; NOP(); for(i = 0;i<7;i++) { SHT1X_SCK = 1; NOP(); temp <<= 1; if(SHT1X_DAT) { temp |= 1; } SHT1X_SCK = 0; NOP(); } SHT1X_DATA_OUT; NOP(); SHT1X_DAT = 0; NOP(); SHT1X_SCK = 1; NOP();NOP(); SHT1X_SCK = 0; NOP(); NOP(); SHT1X_DATA_IN; for(i = 0;i<8;i++) { SHT1X_SCK = 1; NOP(); temp <<= 1; if(SHT1X_DAT) { temp |= 1; } SHT1X_SCK = 0; NOP(); } SHT1X_DATA_OUT; NOP(); SHT1X_DAT = 1; SHT1X_SCK = 1; NOP(); SHT1X_SCK = 0; return temp; } void main(void) { char Status = 1;//报警器状态,1为开启 RLED = OFF; //关灯 uchar Keyvalue = 0 ; Initial(); //intClock(); ??函数干嘛用的 P2DIR |= 0x01; //打开电源 P2 &=~ 0x01; SHT1X_INT(); ugOled9616int(); //初始化OLed 配置 delay(10); while(1) { Lcddisplay();//显示温湿度传感器信号 Keyvalue = KeyScan(); //扫键 while(Status == 1) { if(tempsht>=28.00&&Keyvalue==0) { RLED = !RLED; delay(500); } if(tempsht>=28.00&&Keyvalue==1) { RLED = OFF; //关灯 Status = 0 ; } } } } ``` ``` 编译的时候老是在SHT1X_DATA_IN;SHT1X_DATA_OUT出错,求大神解答

C++创建点类、直线类、圆类、矩形类、试求解给定直线与圆、直线及矩形的交点。

用C++创建点类、直线类、圆类、矩形类、求解给定直线与圆、直线及矩形的交点。 具体代码!!!

基于java的游戏,添加倒计时,让倒计时随着游戏重新开始,重新计时

链接有完整代码,想让里面的倒计时模块随着新游戏开始重新计时,改如何更改。[](https://gitee.com/whos_a_white_coat_is_a_teenager/maze_game "")

求改正,不知道为什么导不出文件

#include <stdio.h> #include <stdlib.h> #include <io.h> #include <ctype.h> #include <string.h> #include <conio.h> #include <sys/stat.h> typedef struct student { char name[10]; int schoolnumber; int classnumber; float score[10]; struct student *next; } stu,*stupt; stupt st=NULL;//学生信息的头指针 stupt qt=NULL;//学生信息的尾指针 FILE* fp;//文件指针 typedef struct user { char logname[10]; char passwd[6]; }*userpt,user; void clear(void)//清空缓冲区函数 { char ch; do { ch=getchar(); } while(ch!='\n'); } void Printf_help()//主菜单 { printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf(" |*尊敬的用户请您选择操作: *|\n"); printf(" |* 1.手动输入学生作业的分数 *|\n"); printf(" |* 2.从文件导入学生信息 *|\n"); printf(" |* 3.输入学号,显示某位学生作业完成情况 *|\n"); printf(" |* 4.输入班级的班号,显示该班所有学生的作业完成情况 *|\n"); printf(" |* 5.输入学生的学号,修改该学生的各类信息 *|\n"); printf(" |* 6.输入学生的学号,删除该学生的信息 *|\n"); printf(" |* 7.显示各类统计信息 *|\n"); printf(" |* 8.菜单 *|\n"); printf(" |* 9.清屏 *|\n"); printf(" |* a.导出至文件 *|\n"); printf(" |* 0.退出系统 *|\n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf(":"); } //1.输入成绩 void inpu(stupt p) { int n; int m=0; int flag; while(m<10)//成绩初始化为0 { p->score[m]=0; m++; } printf("请您输入姓名:"); scanf("%s",p->name); clear(); printf("请您输入学号:"); scanf("%d",&p->schoolnumber); clear(); printf("请您输入班级号(如:101):"); scanf("%d",&p->classnumber); clear(); do { printf("请您输入第几次作业(1~10):"); scanf("%d",&n); clear(); printf("请您输入该次作业成绩:"); scanf("%f",&p->score[n-1]); clear();//清空缓冲区 printf("您是否继续输入该生成绩,退出请按q,其他键继续:"); flag=getchar(); clear();//清空缓冲区堆积 } while(flag!='q'); } void input(stupt st,stupt qt) { char flag; stupt p,q; p=q=NULL; printf("请问您确认输入?y.是 n.取消(注意大小写)\n"); while((flag=getchar())!='n') { clear();//清空缓冲区 if(flag=='y') { p=(stupt)malloc(sizeof(st));//动态申请空间 if(p==NULL) exit(1); inpu(p); if(st==NULL) st=qt=p; else if(qt!=NULL) { qt->next=p; //尾指针非空(及链表已存在)接着尾指针建立链表 qt=p; } } else { printf("温馨提示:您存在非法输入,请进入菜单界面重新选择(按8或9):"); return; } printf("请问您是否继续输入?y.是 n.否(注意大小写)\n"); } if(flag=='n') { Printf_help(); clear(); } if(p!=NULL&&qt!=NULL) { qt->next=NULL; } } //2.导入成绩、 void read1(stupt p,FILE* fp) { fscanf(fp,"%s",&p->name); fscanf(fp,"%d",&p->schoolnumber); fscanf(fp,"%d",&p->classnumber); fscanf(fp,"%f",&p->score[0]); fscanf(fp,"%f",&p->score[1]); fscanf(fp,"%f",&p->score[2]); fscanf(fp,"%f",&p->score[3]); fscanf(fp,"%f",&p->score[4]); fscanf(fp,"%f",&p->score[5]); fscanf(fp,"%f",&p->score[6]); fscanf(fp,"%f",&p->score[7]); fscanf(fp,"%f",&p->score[8]); fscanf(fp,"%f",&p->score[9]); } //从文件导入数据 void filep_read_to_st(stupt st,FILE* fp) { stupt p; st=NULL;//置空st,准备从文件中导入学生信息 while(1) { p=(stupt)malloc(sizeof(stu)); read1(p,fp); if(feof(fp)) //如果文件结束,则结束(feof:检测流上的文件结束符) break; if(st==NULL) st=qt=p; else if(qt!=NULL) { qt->next=p; //尾指针非空(即链表已存在)接着尾指针建立链表 qt=p; } } if(feof(fp)) { qt->next=NULL; //如果文件结束,尾指针next指空 } if(st!=NULL&&feof(fp)) printf("温馨提示:您的文件导入成功!\n"); else printf("温馨提示:您的文件导入失败,请重新导入!\n"); } void readfile(stupt st,FILE* fp)//写入数据方式 { char flag,flag_1; char filename[90]; printf("温馨提示:您如果在导入前有过手动输入,请先导出至文件后再进行导入,否则输入那部分数据将丢失。\n"); printf("按任意键继续,退出请按q:"); flag_1=getchar(); clear(); if(flag_1=='q') { return; } printf("程序默认路径导入:"); clear(); fp=fopen("student_homework_infor.txt","r"); if(access("student_homework_infor.txt",0)==1) { printf("温馨提示:您的文件不存在!\n"); } if(fp==NULL) { printf("温馨提示:打开程序所在目录下的student_homework_infor.txt文件失败,请返回主菜单重试!\n"); return; } else filep_read_to_st(st,fp); fclose(fp); } //3.按学号查询 void printf_score(stupt p)//输出该学号学生的成绩 { int n=0; printf("前十次成绩如下:\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); while(n<10) { printf("%f ",p->score[n]); n++; } printf("\n"); } void search(stupt st,int snum)//判断学号是否合法 { stupt p,q; if(st==NULL) { printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n"); return; } else { p=st; q=p->next; } if(p->schoolnumber==snum) { printf_score(p); //查找成功输出并返回上级函数 return; } while(q!=NULL) { if(q->schoolnumber==snum) { printf_score(q); //查找成功输出并返回上级函数 return; } q=q->next;//下一个 } printf("查询失败,该学号学生信息不存在\n"); } void school_num_search(stupt st) { int snum; char flag; do { printf("请输入要查找的学生学号(如221):"); scanf("%d",&snum); clear();//清空scanf结束时进入缓冲的enter符 search(st,snum); printf("退出请按q,其它任意键继续查找:"); flag=getchar(); clear();//清空回车符 } while(flag!='q'); if(flag=='q') { Printf_help(); } } //4.给定班级查询 void printf_infor(stupt p) //输出函数 { printf("%-5d%-8s%-5d%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f\n",p->classnumber,p->name,p->schoolnumber,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],p->score[5],p->score[5],p->score[7],p->score[8],p->score[9]); printf("──────────────────────────────────────\n"); } void search_2(stupt st,int clnum) { stupt p,q; int f=0; if(st==NULL) { printf("未建立学生信息表,请返回主菜单输入所有学生的信息\n"); return; } else { p=st; q=p->next; } printf("班级 姓名 学号 成绩1 成绩2 成绩3 成绩4 成绩5 成绩6 成绩7 成绩8 成绩9 成绩10\n"); printf("──────────────────────────────────────\n"); if(p->classnumber==clnum) { printf_infor(p); f++; }//查找成功输出 while(q!=NULL) { if(q->classnumber==clnum) { printf_infor(q); f++; }//查找成功输出 q=q->next;//下一个 } if(f==0) { printf("没有该班级学生信息\n"); } } void class_num_search(stupt st)//查找班级 { int clnum; char flag; do { printf("请输入班级(如101):"); scanf("%d",&clnum); clear();//清空scanf结束时进入缓冲的enter符 search_2(st,clnum); printf("退出请按q,其它任意键继续查找:"); flag=getchar(); clear();//清空回车符 } while(flag!='q'); if(flag=='q') { Printf_help(); } } //5.修改姓名班级成绩 void change_name(stupt p)//修改姓名 { printf("原姓名为:%s\n",p->name); printf("请输入新姓名:"); scanf("%s",p->name); clear(); } void change_class(stupt p)//修改班级 { printf("原班级为:%d\n",p->classnumber); printf("请输入新班级:"); scanf("%d",&p->classnumber); clear(); } void change_score(stupt p)//修改分数 { int n; char flag; do { printf("请输入:要修改的作业的次数(1~10):"); scanf("%d",&n); clear();//清空缓冲区 printf("原成绩为:%f\n",p->score[n-1]); printf("请输入:该次作业新成绩:"); scanf("%f",&p->score[n-1]); clear();//清空缓冲区 printf("是否继续修改该生成绩,退出请按q,其他键继续"); flag=getchar(); clear(); } while(flag!='q'); } void printf_help_2()//帮助列表 { printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf(" |* 请选择操作: *|\n"); printf(" |* 1.修改姓名 *|\n"); printf(" |* 2.修改班级 *|\n"); printf(" |* 3.修改成绩 *|\n"); printf(" |* 0.返回 *|\n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf(":"); } void change(stupt p) { char a; printf_help_2(); while((a=getchar())!='0') { clear(); printf("班级 姓名 学号 成绩1 成绩2 成绩3 成绩4 成绩5 成绩6 成绩7 成绩8 成绩9 成绩10\n"); printf("──────────────────────────────────────\n"); printf_infor(p); switch(a) { case '1': { printf("您选择了:1.修改姓名\n"); change_name(p); break; } case '2': { printf("您选择了:2.修改班级\n"); change_class(p); break; } case '3': { printf("您选择了:3.修改成绩\n"); change_score(p); break; } default: { printf("非法输入,请重新选择!\n"); break; } } printf_help_2(); } if(a=='0') { clear(); printf("您选择了:0.返回\n"); } } void search_3(stupt st,int snum) { stupt p,q; int f=0; if(st==NULL) { printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n"); return; } else { p=st; q=p->next; } if(p->schoolnumber==snum) { change(p); //查找成功并修改 f++; return; } while(q!=NULL) { if(q->schoolnumber==snum) { change(q); //查找成功并修改 return; } q=q->next;//下一个 } if(f==0) { printf("没有该学生信息\n"); } } void school_num_change(stupt st) { int snum; char flag; do { printf("请输入要修改学生学号(如101):"); scanf("%d",&snum); clear();//清空scanf结束时进入缓冲的enter符 search_3(st,snum); printf("退出请按q,其它任意键继续按学号查找修改信息:"); flag=getchar(); clear();//清空回车符 } while(flag!='q'); if(flag=='q') { Printf_help(); } } //6.删除学生信息 void delete_pt(stupt st,int snum)//判断并删除 { stupt p,q; if(st==NULL) { printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n"); return; } else { p=st; q=p->next; } if(p->schoolnumber==snum)//按照学号删除 { st=q; //查找成功删除并返回上级函数 printf("班级 姓名 学号 成绩1 成绩2 成绩3 成绩4 成绩5 成绩6 成绩7 成绩8 成绩9 成绩10\n"); printf("──────────────────────────────────────\n"); printf_infor(p); free(p); printf("上面信息删除成功!\n"); return; } while(q!=NULL) { if(q->schoolnumber==snum) { p->next=q->next; //查找成功删除并返回上级函数 printf("班级 姓名 学号 成绩1 成绩2 成绩3 成绩4 成绩5 成绩6 成绩7 成绩8 成绩9 成绩10\n"); printf("──────────────────────────────────────\n"); printf_infor(q); free(q); printf("上面信息删除成功!\n"); return; } else//下一个 { p=q; q=p->next; } } printf("删除失败,该学号学生信息不存在\n"); } void school_num_delete(stupt st) { int snum; char flag; do { printf("请输入要删除的学生学号(如221):"); scanf("%d",&snum); clear();//清空scanf结束时进入缓冲的enter符 delete_pt(st,snum); printf("返回请按q,其它任意键继续删除:"); flag=getchar(); clear();//清空回车符 } while(flag!='q'); if(flag=='q') { Printf_help(); } } //7.查询成绩,按学号班级,降序 void printf_help_3()//帮助菜单 { printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf(" |*请选择操作: *|\n"); printf(" |* 1.按学号查看学生平均成绩 *|\n"); printf(" |* 2.按班级查看学生平均成绩 *|\n"); printf(" |* 3.按平均成绩降序排序(操作执行后将会对学生信息排序 )*|\n"); printf(" |* 0.返回主菜单 *|\n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf(":"); } int aver(stupt p)//平均成绩 { int n=0; float sum=0;//和初始化为0 while(n<10) { sum+=p->score[n]; n++; } return sum; } void search_4(stupt st,int snum) { stupt p,q; int f=0; int sum; printf("-----------------------------------------------------------------------------\n");//分行符 if(st==NULL) { printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n"); return; } else { p=st; q=p->next; } if(p->schoolnumber==snum) { sum=aver(p); printf("姓名:%-10s学号:%-10d班级:%-10d作业完成平均成绩:%d\n",p->name,p->schoolnumber,p->classnumber,sum/10); f++; printf("-----------------------------------------------------------------------------\n");//分行符 return; }//查找成功并输出平均值 while(q!=NULL) { if(q->schoolnumber==snum) { sum=aver(q); printf("姓名:%-10s学号:%-10d班级:%-10d作业完成平均成绩:%d\n",q->name,q->schoolnumber,q->classnumber,sum/10); f++; printf("-----------------------------------------------------------------------------\n");//分行符 return; }//查找成功并输出平均值 q=q->next;//下一个 } if(f==0) { printf("没有该学生信息\n"); } } void snum_check_aver(stupt st)//按学号输出学生平均成绩 { int snum; printf("请输入学号:"); scanf("%d",&snum); clear();//清空scanf结束时进入缓冲的enter符 search_4(st,snum); } void search_5(stupt st,int cnum) { stupt p,q; int f=0; int sum; printf("-----------------------------------------------------------------------------\n");//分行符 if(st==NULL) { printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n"); return; } else { p=st; q=p->next; } if(p->classnumber==cnum) { sum=aver(p); printf("姓名:%-10s学号:%-10d班级:%-10d作业完成平均成绩:%d\n",p->name,p->schoolnumber,p->classnumber,sum/10); f++; }//查找成功并输出平均值 while(q!=NULL) { if(q->classnumber==cnum) { sum=aver(q); printf("姓名:%-10s学号:%-10d班级:%-10d作业完成平均成绩:%d\n",q->name,q->schoolnumber,q->classnumber,sum/10); f++; }//查找成功并输出平均值 q=q->next;//下一个 } if(f==0) { printf("没有该班级的信息\n"); } printf("-----------------------------------------------------------------------------\n");//分行 } void cnum_check_aver(stupt st) { int cnum; printf("请输入班级:"); scanf("%d",&cnum); clear();//清空scanf结束时进入缓冲的enter符 search_5(st,cnum); } void insert_emp1(stupt emp1,stupt q) { stupt pt1,pt2; pt1=emp1; pt2=pt1->next; while(pt2!=NULL) { if(aver(q)>aver(pt2))//插到pt2之前 { pt1->next=q; q->next=pt2; return; } else//指针后移 { pt1=pt2; pt2=pt1->next; } } pt1->next=q;//比所有的都不大,插到末尾 q->next=NULL; } void descending_order_check(stupt st) { stupt emp1,head1,head2,pt; float sum; printf("-----------------------------------------------------------------------------\n");//分行符 if(st==NULL) { printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n"); return; } head1=(stupt)malloc(sizeof(stu)); head2=(stupt)malloc(sizeof(stu));//另一个空链表头指针,将st有序插入到head2 head1->next=st->next; st->next=NULL; head2->next=st; pt=head1->next; while(pt!=NULL) { head1->next=pt->next; insert_emp1(head2,pt); pt=head1->next; } emp1=head2->next; st=emp1; while(emp1!=NULL) { sum=aver(emp1); printf("姓名:%-10s学号:%-10d班级:%-10d作业完成平均成绩:%-10.3f\n",emp1->name,emp1->schoolnumber,emp1->classnumber,sum/10); emp1=emp1->next; } printf("-----------------------------------------------------------------------------\n");//分行符 } //----------------------------------------------------------------------------------------------- void statistics_result(stupt st) { char flag; printf_help_3(); while((flag=getchar())!='0') { clear(); switch(flag) { case '1': { printf("您选择了:1.按学号查看学生平均成绩\n"); snum_check_aver(st); break; } case '2': { printf("您选择了:2.按班级查看学生平均成绩\n"); cnum_check_aver(st); break; } case '3': { printf("您选择了:3.查看学生平均成绩降序序列\n"); descending_order_check(st); break; } default: { printf("非法输入,请重新选择!\n"); clear(); break; } } printf_help_3(); } if(flag=='0') { printf("您选择了:0.返回主菜单\n"); clear(); Printf_help(); } } //导出 void fileprintf(stupt st,FILE* fp) { stupt pt; pt=st; while(pt!=NULL) { fprintf(fp,"%s %d %d %f %f %f %f %f %f %f %f %f %f\n",pt->name,pt->schoolnumber,pt->classnumber,pt->score[0],pt->score[1],pt->score[2],pt->score[3],pt->score[4],pt->score[5],pt->score[6],pt->score[7],pt->score[8],pt->score[9]); pt=pt->next; } printf("文件导出成功 !\n"); } void creat_files(stupt st,FILE* fp) { char flag; char filename[90]; printf("默认路径保存(为当前目录下的student_homework_infor.txt)"); clear(); fp=fopen(".\\student_homework_infor.txt","a"); if(fp==NULL) { printf("创建文件至程序所在目录下的student_homework_infor.txt文件失败,请返回主菜单重试!"); return; } else fileprintf(st,fp); fclose(fp); } //注册登录 void printf_log() { printf("\t\t\t~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf("\t\t\t|* 请选择操作: *|\n"); printf("\t\t\t|* 1.登录 *|\n"); printf("\t\t\t|* 2.注册 *|\n"); printf("\t\t\t|* 0.退出 *|\n"); printf("\t\t\t~~~~~~~~~~~~~~~~~~~~~~~~ \n"); printf(":"); } void write_in_file(char *a,char *name,FILE *fp) { fprintf(fp,"%s %s\n",a,name); fclose(fp); printf("您已注册成功!\n"); } void read_passwd(char *a,char *name,FILE *fp) { fscanf(fp,"%s",a); fscanf(fp,"%s",name); } int log() { char ch; char a[7]={'0'}; char name[12]={'0'};//初始化 char b[7]={'0'}; FILE* fp; int i; fp=fopen("passwd.txt","r"); if(fp==NULL) { printf("注册文件无法打开,请在程序当前目录下创建passwd.txt文件并重新注册!\n"); exit(1); } ch=getc(fp); if(ch==EOF) { printf("未注册,请注册!\n"); return 1; } fclose(fp); fp=fopen("passwd.txt","r"); if(fp==NULL) { fp=fopen("passwd.txt","a"); exit(1); fclose(fp); } read_passwd(a,name,fp); fclose(fp); printf("用户名:%s\n",name); printf("请输入密码:(6个字符)"); for(i=0;i<6;i++) { b[i]=getch(); printf("*"); } b[6]='\0'; clear(); if(strcmp(a,b)==0) { printf("登陆成功!\n"); return 0; } else { printf("密码错误,请重新登录\n"); return 1; } } void login() { char a[7]={'0'}; char b[7]={'0'}; char name[12]={'0'};//初始化 FILE* fp; char ch; int i; fp=fopen("passwd.txt","r"); if(fp==NULL) { printf("注册文件无法打开或已损坏,请在程序当前目录下创建passwd.txt文件!\n"); return; } ch=getc(fp); fclose(fp); if(ch!=EOF) { printf("账户已存在,请返回登陆菜单!\n"); return; } printf("请输入用户名:(小于12字符)"); scanf("%s",name); clear(); lab_3:printf("请输入密码:(6个字符)"); for(i=0;i<6;i++) { a[i]=getch(); printf("*"); } clear(); printf("请确认密码:(6个字符)"); for(i=0;i<6;i++) { b[i]=getch(); printf("*"); } clear(); if(strcmp(a,b)!=0) { printf("两次输入密码不一致,请重新输入!\n"); goto lab_3; } fp=fopen("passwd.txt","wb"); write_in_file(a,name,fp); } int user_log() { char flag; int f; do { printf_log(); flag=getchar(); clear(); if(flag=='1') { f=log(); if(f==0) { return 0; } } else if(flag=='2') { login(); } else if(flag=='0') { return 1; } else { printf("非法输入!,请重新新选择:\n"); } } while(1); } ////////////////////////////////////////////////-main-////////////////////////////////////////////////// int main() { char a,ch; printf(" ┄欢迎您使用学生作业完成情况管理程序┄ \n"); if(user_log()==1) { printf(" ┄谢谢您的使用┄ \n"); return 0; } lab_3: Printf_help(); while((a=getchar())!='0') { clear(); switch(a) { case '1': { printf("您选择了:1.手动输入学生作业的分数\n"); input(st,qt); break; } case '2': { printf("您选择了:2.从文件导入学生信息\n"); readfile(st,fp); Printf_help(); break; } case '3': { printf("您选择了:3.给定学号,显示某位学生作业完成情况\n"); school_num_search(st); break; } case '4': { printf("您选择了:4.输入班级的班号,显示该班所有学生的作业完成情况\n"); class_num_search(st); break; } case '5': { printf("您选择了:5.输入学生的学号,修改该学生的作业完成信息\n"); school_num_change(st); break; } case '6': { printf("您选择了:6.输入学生的学号,删除该学生的信息\n"); school_num_delete(st); break; } case '7': { printf("您选择了:7.显示各类统计信息\n"); statistics_result(st); break; } case '8': { printf("您选择了:8.菜单\n"); Printf_help(); break; } case '9': { printf("您选择了:9.清屏\n"); system("CLS"); Printf_help(); break; } case 'a': { printf("您选择了:a.导出文件\n"); creat_files(st,fp); Printf_help(); break; } default: { printf("非法输入,请重新选择!\n"); Printf_help(); break; } } } if(a=='0') { printf("您选择了:0.退出系统\n"); printf("退出系统时需要导出文件,否则之前操作无效!\n"); printf("按q返回,其它任意键继续\n"); clear(); if((ch=getchar())=='q') { clear(); goto lab_3; } printf(" ┄谢谢使用┄ \n"); } return 0; }

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

C++语言基础视频教程

C++语言基础视频教程

Python可以这样学(第四季:数据分析与科学计算可视化)

Python可以这样学(第四季:数据分析与科学计算可视化)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

Python数据分析与挖掘

Python数据分析与挖掘

相关热词 c# 局部 截图 页面 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c# fir 滤波器 c# 和站 队列 c# txt 去空格 c#移除其他类事件 c# 自动截屏
立即提问