写一个无用的程序

借练习册上的题目,写一个没有实际用途的学生成绩管理系统。

记一下在写代码事的感受吧。

发现的问题:

1.写代码没有自己的风格

2.对环境熟练程度不够

3.写代码之前缺少整体的构思,导致编写完成的代码重复部分多,结构冗杂

解决措施:

1.工欲善其事必先利其器,选择一个好的开发环境,多加练习

2.应该将时间用在程序设计上而不是花大量的时间在敲代码

发现的优点:

1.变量名逐渐形成了自己的特色

2.发现能够借助程序框图理清思路

3.程序编写趋向模块化,对某一模块把握较清楚

程序本身无实用性的原因:

1.程序采用读入文件中的所有数据到内存当中,当文件包含大量数据时不能实现;

2.没有排序功能;

3.数据文件无加密,程序运行无权限限制;

4.程序一次仅执行一次操作,效率低。

日后有时间再来整理优化完善程序

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<fcntl.h>
  4 #include<unistd.h>
  5 #include<errno.h>
  6 #include<string.h>
  7 #include<strings.h>
  8 struct student//学生数据结构体
  9 {
 10 long int num;
 11 char  name[10];
 12 int sex;
 13 int age;
 14 float cscore;
 15 struct student * next;
 16 }*head,*on,*nt;
 17 int main()
 18 {
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 /*---开始从文件读入数据---*/
 30 int fd,pre,total=0;
 31 fd=open("stu.dat",O_RDONLY);//打开文件    
 32 if(fd==EOF)//如果文件打开错误输出错误信息
 33 perror("");        
 34 pre=dup(0);//保存原标准输入
 35 dup2(fd,0);//设置文件为标准输入        
 36 head=(struct student *)malloc(sizeof(struct student));
 37 on=head;    
 38 if(1+scanf("%ld",&(*on).num))
 39 {
 40 total++;
 41 scanf("%s %d %d %f",(*on).name,&(*on).sex,&(*on).age,&(*on).cscore);        
 42 nt=(struct student *)malloc(sizeof(struct student));        
 43 while(1+scanf("%ld",&(*nt).num))
 44 {
 45 total++;
 46 scanf(" %s %d %d %f",(*nt).name,&(*nt).sex,&(*nt).age,&(*nt).cscore);        
 47 (*on).next=nt;
 48 on=nt;
 49 nt=(struct student *)malloc(sizeof(struct student));    
 50 }
 51 (*on).next=NULL;    
 52 }    
 53 close(fd);//关闭文件
 54 dup2(pre,0);//重置标准输入
 55 /*---结束从文件读入数据---*/
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 /*---测试打印链表---
 67     struct student * print_on,* find_next;
 68     print_on=head;
 69     do
 70     printf("%-5ld%-10s%-2d%-4d%-4g\n",(*print_on).num,(*print_on).name,(*print_on).sex,(*print_on).age,(*print_on).cscore);
 71     while((print_on=(*print_on).next)!=NULL);
 72 ---打印链表完成---*/
 73 
 74 
 75 
 76 
 77 
 78 
 79 
 80 
 81 
 82 
 83 /*---查找数据并将指针存入数组---*/
 84 struct student * find[100],* find_on,* insert,* bef_delete;
 85 int func,find_x,find_total=0,change_x;
 86 long int find_num;
 87 char find_name[10],*name;
 88 int find_sex;
 89 int find_age;
 90 float find_cscore1,find_cscore2;
 91 find_on=head;
 92 printf("1.查看数据内容\n2.查找数据并在数据后插入数据\n3.查找数据并修改数据\n4.删除数据\n");
 93 scanf("%d",&func);
 94 printf("1.按学号查找\n2.按姓名查找\n3.按性别查找\n4.按年龄查找\n5.按C成绩范围查找\n\n");
 95 scanf("%d",&find_x);
 96 switch(find_x)
 97 {
 98 case 1:
 99 {
100 printf("请输入学号:\n");
101 scanf("%ld",&find_num);
102 do
103 if((*find_on).num==find_num)
104 find[find_total++]=find_on;
105 while((find_on=(*find_on).next)!=NULL);    
106 break;        
107 }
108 case 2:
109 {
110 printf("请输入姓名:\n");
111 scanf("%s",find_name);
112 name=find_name;
113 do
114 if(!bcmp(find_name,&((*find_on).name),sizeof(name)))
115 find[find_total++]=find_on;
116 while((find_on=(*find_on).next)!=NULL);    
117 break;    
118 }
119 case 3:
120 {
121 printf("请输入性别(0=女,1=男):\n");
122 scanf("%d",&find_sex);
123 do
124 if((*find_on).sex==find_sex)
125 find[find_total++]=find_on;
126 while((find_on=(*find_on).next)!=NULL);    
127 break;        
128 }
129 case 4:
130 {
131 printf("请输入年龄:\n");
132 scanf("%d",&find_age);
133 do
134 if((*find_on).age==find_age)
135 find[find_total++]=find_on;
136 while((find_on=(*find_on).next)!=NULL);    
137 break;    
138 }
139 case 5:
140 {
141 printf("请输入C成绩范围(两个数值中间用空格隔开):\n");
142 scanf("%f%f",&find_cscore1,&find_cscore2);
143 do
144 if((*find_on).cscore>=find_cscore1&&(*find_on).cscore<=find_cscore2||(*find_on).cscore<=find_cscore1&&(*find_on).cscore>=find_cscore2)
145 find[find_total++]=find_on;
146 while((find_on=(*find_on).next)!=NULL);        
147 break;    
148 }
149 default :break;    
150 }
151 /*---指针存入数组完成---*/
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 
162 /*---功能实现---*/
163 int find_total_tem=find_total-1;
164 int i,m;
165 int pfind=0;
166 switch(func)
167 {
168 case 1:
169 {
170 for(;pfind<find_total;pfind++)
171 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[pfind]).num,(*find[pfind]).name,(*find[pfind]).sex,(*find[pfind]).age,(*find[pfind]).cscore);
172 break;
173 }
174 case 2:
175 {
176 while(find_total_tem>=1)
177 {
178 for(;pfind<find_total;pfind++)
179 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[pfind]).num,(*find[pfind]).name,(*find[pfind]).sex,(*find[pfind]).age,(*find[pfind]).cscore);
180 printf("找到以上多个数据,请继续输入筛选条件:\n");
181 
182 printf("1.按学号查找\n2.按姓名查找\n\n");
183 scanf("%d",&find_x);
184 switch(find_x)
185 {
186 case 1:
187 {
188     printf("请输入学号:\n");
189     scanf("%ld",&find_num);
190     for(i=0;i<find_total;i++)
191         if((*find[i]).num==find_num)
192             find[0]=find[i];
193         else find[i]=NULL;
194     find_total_tem=0;
195     break;                
196                         
197 }
198 case 2:
199 {
200 find_total_tem=0;
201 printf("请输入姓名:\n");
202 scanf("%s",find_name);
203 name=find_name;
204 for(i=0;i<find_total;i++)
205 if(!bcmp((*find[i]).name,find_name,sizeof((name))))
206 find[find_total_tem++]=find[i];
207 else find[i]=NULL;                
208 find_total_tem--;        
209 break;    
210 }}}
211 insert=(struct student *)malloc(sizeof(struct student));    
212 printf("请输入待添加学生的学号:\n");
213 scanf("%ld",&(*insert).num);
214 printf("请输入待添加学生的姓名:\n");
215 scanf("%s",(*insert).name);
216 printf("请输入待添加学生的性别(0=女,1=男):\n");
217 scanf("%d",&(*insert).sex);
218 printf("请输入待添加学生的年龄:\n");
219 scanf("%d",&(*insert).age);
220 printf("请输入待添加学生C语言成绩:\n");
221 scanf("%f",&(*insert).cscore);
222 (*insert).next=(*find[0]).next;
223 (*find[0]).next=insert;
224 fd=open("stu.dat",O_RDWR|O_TRUNC);//打开文件    
225 if(fd==EOF)//如果文件打开错误输出错误信息
226 perror("");        
227 pre=dup(1);//保存原标准输出的值
228 dup2(fd,1);//设置文件为标准输出
229 on=head;
230 do printf("%-5ld%-10s%-2d%-4d%-4g\n",(*on).num,(*on).name,(*on).sex,(*on).age,(*on).cscore);
231 while((on=(*on).next)!=NULL);
232 close(fd);//关闭文件
233 dup2(pre,1);//重置标准输出
234 printf("添加并保存数据完成\n");
235 break;
236 }
237 case 3:
238 {
239 while(find_total_tem>=1)
240 {
241 for(;pfind<find_total;pfind++)
242 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[pfind]).num,(*find[pfind]).name,(*find[pfind]).sex,(*find[pfind]).age,(*find[pfind]).cscore);
243 printf("找到多个数据,请继续输入筛选条件:\n");
244 printf("1.按学号查找\n2.按姓名查找\n\n");
245 scanf("%d",&find_x);
246 switch(find_x)
247 {
248 case 1:
249 {
250 printf("请输入学号:\n");
251 scanf("%ld",&find_num);
252 for(i=0;i<find_total;i++)
253 if((*find[i]).num==find_num)
254 find[0]=find[i];
255 else find[i]=NULL;
256 find_total_tem=0;
257 break;                        
258 }
259 case 2:
260 {
261 find_total_tem=0;
262 printf("请输入姓名:\n");
263 scanf("%s",find_name);
264 name=find_name;
265 for(i=0;i<find_total;i++)
266 if(!bcmp((*find[i]).name,find_name,sizeof((name))))
267 find[find_total_tem++]=find[i];
268 else find[i]=NULL;                
269 find_total_tem--;        
270 break;    
271 }}}
272 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[0]).num,(*find[0]).name,(*find[0]).sex,(*find[0]).age,(*find[0]).cscore);
273 printf("请输入要修改的内容:\n");
274 printf("1.学号 2.姓名 3.性别 4.年龄 5.成绩\n");
275 scanf("%d",&change_x);
276 switch(change_x)
277 {
278 case 1:
279 {
280 printf("请输入学号:\n");
281 scanf("%ld",&(*find[0]).num);
282 break;
283 }
284 case 2:
285 {
286 printf("请输入姓名\n");
287 scanf("%s",(*find[0]).name);
288 break;
289 }
290 case 3:
291 {
292 printf("请输入性别(0=女,1=男):\n");
293 scanf("%d",&(*find[0]).sex);
294 break;
295 }
296 case 4:
297 {
298 printf("请输入年龄:\n");
299 scanf("%d",&(*find[0]).age);
300 break;
301 }
302 case 5:
303 {
304 printf("请输入C成绩:\n");
305 scanf("%f",&(*find[0]).cscore);
306 break;
307 }
308 default:break;
309 }
310 fd=open("stu.dat",O_RDWR|O_TRUNC);//打开文件    
311 if(fd==EOF)//如果文件打开错误输出错误信息
312 perror("");        
313 pre=dup(1);//保存原标准输出
314 dup2(fd,1);//设置文件为标准输出
315 on=head;
316 do    
317 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*on).num,(*on).name,(*on).sex,(*on).age,(*on).cscore);
318 while((on=(*on).next)!=NULL);
319 close(fd);//关闭文件
320 dup2(pre,1);//重置标准输出
321 printf("修改并保存数据完成\n");
322 break;
323 }
324 case 4:
325 {
326 while(find_total_tem>=1)
327 {
328 for(;pfind<find_total;pfind++)
329 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*find[pfind]).num,(*find[pfind]).name,(*find[pfind]).sex,(*find[pfind]).age,(*find[pfind]).cscore);
330 printf("找到多个数据,请继续输入筛选条件:\n");
331 printf("1.按学号查找\n2.按姓名查找\n\n");
332 scanf("%d",&find_x);
333 switch(find_x)
334 {
335 case 1:
336 {
337 printf("请输入学号:\n");
338 scanf("%ld",&find_num);
339 for(i=0;i<find_total;i++)
340 if((*find[i]).num==find_num)
341 find[0]=find[i];
342 else find[i]=NULL;
343 find_total_tem=0;
344 break;                    
345 }
346 case 2:
347 {
348 find_total_tem=0;
349 printf("请输入姓名:\n");
350 scanf("%s",find_name);
351 name=find_name;
352 for(m=0;m<find_total;i++)
353 if(!bcmp((*find[i]).name,find_name,sizeof((name))))
354 find[find_total_tem++]=find[i];
355 else find[i]=NULL;
356 find_total_tem--;
357 break;
358 }}}
359 bef_delete=head;
360 if(head==find[0])
361 head=(*head).next;
362 else
363 {
364 while((*bef_delete).next!=find[0])
365 bef_delete=(*bef_delete).next;
366 (*bef_delete).next=(*find[0]).next;
367 }
368 fd=open("stu.dat",O_RDWR|O_TRUNC);//打开文件
369 if(fd==EOF)//如果文件打开错误输出错误信息
370 perror("");
371 pre=dup(1);//保存原标准输出的值
372 dup2(fd,1);//设置文件为标准输出
373 on=head;
374 do
375 printf("%-5ld%-10s%-2d%-4d%-4g\n",(*on).num,(*on).name,(*on).sex,(*on).age,(*on).cscore);
376 while((on=(*on).next)!=NULL);
377 close(fd);//关闭文件
378 dup2(pre,1);//重置标准输出
379 printf("删除数据完成\n");
380 }
381 default :break;
382 }
383 /*---功能结束---*/
384 
385 
386 
387 
388 
389 
390 
391 
392 return 0;
393 }
View Code

 

转载于:https://www.cnblogs.com/Bird-Xu/p/6937751.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你好,我可以为您提供一个 qq 自动回话的程序。您可以使用 Python 编一个简单的脚本,使用 qqbot 库来实现自动回复功能。以下是一个示例代码: ```python # 导入 qqbot 库 from qqbot import QQBotSlot as qqbotslot, RunBot # 定义一个自动回复函数 @qqbotslot def onQQMessage(bot, contact, member, content): # 判断消息是否为群消息 if contact.ctype == 'group': # 判断消息是否为 @ 我的消息 if '@ME' in content: # 回复消息 bot.SendTo(contact, '您好,我正在忙,请稍后再联系我。') ``` 您可以根据自己的需要修改回复的内容和触发条件。然后使用 RunBot 函数来启动机器人: ```python if __name__ == '__main__': # 启动机器人 RunBot() ``` 注意,您需要先安装 qqbot 库,并且需要在 qqbot 的配置文件中设置好您的账号信息和机器人的登录信息。具体的操作方法可以参考 qqbot 的官方文档。 ### 回答2: 编一个QQ自动回话的程序需要使用到机器学习和自然语言处理的技术。首先,我们需要收集大量的QQ对话数据作为训练集,包括用户的问题和机器人的回答。然后,我们可以使用以下步骤来编程序: 1. 数据预处理:对收集到的对话数据进行清洗和整理,去除无用信息和特殊字符,并将问题和回答分开保存。 2. 特征提取:将问题和回答转换为计算机可以处理的向量表示,可以使用词袋模型、TF-IDF等技术将文本转换为数值特征。 3. 模型训练:选择合适的机器学习算法,例如支持向量机、朴素贝叶斯、神经网络等,对问题和回答的特征向量进行训练。 4. 模型调优:通过交叉验证和参数调整等方法来优化模型的性能,提升回答的准确度和流畅度。 5. 模型部署:将训练好的模型部署到QQ自动回话的程序中,实现即时的对话回复功能。 6. 对话管理:设计一个合理的对话管理引擎,解决实时输入的问题,使用模型预测出回答,并展现给用户。 需要注意的是,编一个高质量的QQ自动回话程序一个复杂的任务,需要使用到多个领域的知识和技术。此外,为了保证程序的准确度和可靠性,还需要随时更新和维护模型,不断优化和改进算法。 ### 回答3: 一个 QQ 自动回话的程序一个有趣的项目。该程序可以根据用户输入的消息进行自动回复,模拟人类的对话交流。 首先,需要使用 Python 编程语言来实现这个程序。我们可以使用 QQ 的开放接口进行消息的发送和接收。使用第三方库,比如 qqlib 或者 qqbot,可以方便地实现与 QQ 的连接和消息的发送。 程序的基本架构可以分为两部分:消息的接收和回复的发送。 在消息的接收部分,程序需要监听用户发送的消息。需要实现一个循环,不断接收来自用户的消息,并对消息进行处理。可以通过使用接口提供的方法来获取用户的消息。 在回复的发送部分,我们可以使用一些模糊匹配的方法来判断用户的意图,并根据意图选择合适的回复策略。可以使用条件语句或者机器学习方法来判断用户的意图。 回复的内容可以提前进行训练,也可以通过爬取互联网上的数据来生成。如果是基础的问答对话,可以使用预置的回答模板,通过替换关键词来生成具体的回复。 除了基本的问答功能,还可以考虑实现一些其他的功能,比如天气查询、新闻推送等。 总的来说,编一个 QQ 自动回话的程序需要使用 Python 编程语言,通过第三方库连接 QQ,并实现消息的接收和回复的发送。在回复部分可以使用模糊匹配或者机器学习方法来判断用户的意图,并提供合适的回复策略。最后,根据需求可以扩展其他功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值