C语言课程设计[2023-05-27]

Posted codewriter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言课程设计[2023-05-27]相关的知识,希望对你有一定的参考价值。

C语言课程设计[2023-05-27]

C 语言课程设计 综合性设计实验 说明

 设计要求:
(1) 功能完备,实现用户需求
(2) 用户界面友好易用
(3) 必须调试通过,能够正常运行
(4) 驼峰命名、合理注释、模块化程序功能实现等规范化编程
(5) 保证源程序可读性。对系统常量等数据要求规范处理,对于常用的功能和算法如排序做成自己的库函数,使用头文件的方式实现分离编译
(6) 保证信息合法性,规范录入信息,对账号等规范保存
(7) 保证实用性,根据用户需求设计各种功能,并能够处理一些特殊情况的要求,此外,尽可能预留空间,以便扩充功能。
(8) 对实验结果的处理包括程序测试、结果分析、结论及改进方案等内容

 提交的课程设计成果包括:
(1) 实验报告。详细描述用户需求分析、可行性分析、算法设计、函数设计,实验报告中不需要包括源代码(源代码文件.c 另行提交)。
(2) 程序文件(源代码文件.c、数据文件和可执行文件.exe)。要求运行演示,演示时采用答辩形式,由同学边演示边讲解编程设计实现思路。提交的源代码要求具备良好的可读性。

(实验报告的具体格式详见模板)

一、必做题目: 西山湖教务管理系统
 数据:
(1) 学生自然信息:
学号、姓名、所在专业、毕业否、出生日期、3 门课程的学分(高数 3 学分、数字逻辑 2 学分、离散数学 4 学分)及对应成绩和绩点……
(数据文件预存至少 20 个学生的完备自然信息)。
 学号:学号是唯一区分学生的关键字。
 绩点:0 - 5。成绩低于 60 分的绩点为 0,60 分对应绩点 1.0,61 分对应绩点 1.1,……,99 分对应绩点 4.9,100 分对应绩点 5.0。
 学分:绩点为 0 的对应学分记为 0,绩点为 1.0-5.0 之间的记为该课程学分。
(2) 教师自然信息:
工号、姓名……
(3) 课程自然信息:
课程号、课程名……
试编写程序,提供友好的用户界面,包括菜单选择进入学生用户、教师用户或管理员界面进行各种查询和编辑、以及系统帮助文件和退出等。

 系统首页:

  1. 系统欢迎首页信息提示、登录功能。
    (1)欢迎首页(系统名称、版本,以及系统设计者等相关信息),提供登录验证功能,账户和密码验证成功则进入各自身份对应的功能模块。
    (2)用户(管理员、教师、学生)账号和密码。基于高校师生员工数据管理的特殊性,不允许师生用户自由注册,仅由管理员分配账号(教师:6 位工号;学生:12 位学号)和初始密码,然后该账户可以根据自己初始密码更改新密码;
    (3)设置新用户账号和密码,管理员专有功能。
  2. 提供友好的欢迎界面,用菜单选项分别进入学生用户查询界面、后台管理员界面。用户通过键入数字或字母实现菜单功能选择,进入子模块。

 学生用户模块:
(为学生用户提供友好的功能选择界面,通过键入数字或者字母实现功能选择,进而进入相应查询功能):
【学有余力的同学完成:
基于个人信息保护,学生用户只能查询本人具体信息和本专业排名最高最低、优秀率等总体信息,不可查询他人具体个人信息。】*

  1. 密码验证进入学生查询界面。
  2. 菜单显示学生信息查询及退出系统等功能,用户通过键入数字或者字母实现功能选择,进而进入相应查询功能。
  3. 查询学生[本人]的全部自然信息。
  4. 查询学生[本人]的总分在本专业的排名。
  5. 查询某课程的最高分、最低分和平均分(查询总分最高最低时如果有相同成绩的学生要全部显示)。
  6. 查询某课程平均成绩以及高于、低于和等于平均成绩的人数。
  7. 查询某课程成绩为优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)的人数和所占百分比。
  8. 查询学生[本人]每学期学业预警:低于该学期指定学分的则学业预警,如第一学期这三门课总学分低于 7 学分则学业预警。
  9. 其他功能。

 管理员模块
(为管理员提供友好的功能选择界面,通过键入数字或者字母实现功能选择,进而进入相应管理功能):
【学有余力的同学完成:
将管理员细分为教师和教务管理者分别完成不同管理功能,教师只能在有效期内编辑自己课程的学生分数信息,教务管理者只能浏览打印所有信息。】*

  1. 密码验证进入管理员界面。
  2. 菜单显示浏览、增删改及退出系统等功能,用户通过键入数字或者字母实现功能选择,进而进入相应功能
  3. 浏览某专业全体学生的所有信息及总排名,根据学生的总分进行排序输出。
  4. 单科课程排序输出。
  5. 对学生信息的增、删、改。
  6. 对某课程的成绩数据编辑。
  7. 其他功能。
    【注意:】
  8. 数据处理考虑文件的读取和写入。
  9. 数据更新时,保障数据文件的及时刷新保存。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

二、附加题目(任选)
目录

  1. 银行帐户管理...........................................................................................................................5

  2. 航班售票系统...........................................................................................................................6

  3. 长整数运算...............................................................................................................................7

  4. 计算器.......................................................................................................................................7

  5. 发牌...........................................................................................................................................8

  6. 时钟模拟...................................................................................................................................8

  7. 俄罗斯方块游戏.......................................................................................................................9

  8. 模拟指法练习程序(统计正确率及输入速度)...................................................................9

  9. C 语言实现艺术清屏.............................................................................................................10

  10. 五子棋游戏.........................................................................................................................10

  11. 高考录取系统.....................................................................................................................10

  12. 其他.....................................................................................................................................10

  13. 银行帐户管理
    要求建立二进制文件存储银行帐户信息,其中每个用户帐户信息中要求保存帐号、用户身份证号码、用户姓名、用户地址、帐户金额等,完成以下功能:
     录入新帐户;
     查询帐户情况,根据输入的帐号查询用户情况和帐户金额;
     修改帐户信息,要求用户输入帐号,根据用户需要修改除了帐号之外的其余信息;
     删除帐户:根据输入的帐号找到要删除的帐号信息以后,经确认后删除该帐号信息;
    提示:程序中定义用户帐户结构体:

struct account

char accounted[10];
char customerid[30];
char name[20];
char address[30];
float balance;
;

其中存储用户帐户信息的二进制文件中每个数据类型应为 struct account,在操作之前可以考虑先将文件中的用户帐户信息读出并建立成一个链表,然后进行查询、删除等操作,可节省读写文件的时间;当录入新帐户信息、修改帐户信息之后,同时更新相应文件的内容;

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

  1. 航班售票系统
    航班售票系统,要求完成以下功能:
     假设该民航有若干航班,要求实现增加航班和取消某个航班的功能。
     查询:根据用户提出的终到站查询航班号、售票情况等航班信息;也可根据航班号,列出该航班已订票的乘客名单。
     订票:根据航班号为客户订票,如该航班有余票,则为客户订票;如该航班已满员,则显示相应信息。
     退票:按乘客要求退出已预定的机票。
    提示:
    数据结构:可以使用链表表示航线表,对每个航班应包括以下信息:航班号、到达港、总座位数、余票额、乘客名单等;其中乘客名单应为一个单链表,每个乘客的信息有:乘客姓名、证件号码、座位号等,为方便查找,可考虑按乘客姓名排序;相应数据类型示范如下:
struct cnode
char name[20]; //乘客姓名
char idcard[30]; //证件号码
int seatno; //座位号
struct cnode *clink; //下一乘客指针
;
struct pnode
int no; //航班号
char destin[30]; //到达站
int limit,rest; //总座位数、余票额
struct cnode *clist; //乘客名单
struct pnode *plink; //下一航班指针
;

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

  1. 长整数运算
    C 中的 long int 所能表示的数据范围有限,现要求编程完成超过 long int 所能表示的数据范围以上的十进制正的长整数的加法和乘法运算;
    提示:两个参与运算的长整数可用 char a[256], b[256]表示,整个程序中要求完成以下几个函数的编写:
     int readlongint(char * x); 此函数用于读入一个正的长整数到 x 中,函数返回长整数的实际长度;要求输入时检查所读入的字符串是否是合法的长整数,如不是提示用户直到输入合法的长整数为止;
     char *addition(char *x,char *y); 此函数用于实现用字符串表示的长整数的加法运算,其计算结果保存在一个动态申请的字符数组空间(其长度为参与加法运算的两个长整数中较长的一个的长度加 1)中,函数返回该数组
    的指针。
     char *multiplacation(char * x,char *y);此函数用于实现用字符串表示的两个长整数的乘法运算,可考虑先将乘数的从个位到最高位的每一位与被乘数相乘(这一步可利用 addition 函数实现),再进行向左偏移后相加完成;注意:此程序设计最关键的问题是对字符数组的下标定位和动态申请恰当的内存空间以保存计算结果,注意在乘法运算中回收不再使用的内存空间。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

  1. 计算器
    编程实现计算器程序,完成实数的加、减、乘、除运算。注意运算符优先级别。
    表达式要求采用中缀形式,例如:2.3+7.2*7
    提示:表达式处理可参考第十章“逆波兰表达式”范例。按 END 键退出算术计算器程序。
    检测是否有键按下,需要调用 kbhit()库函数。
    kbhit 的原数原型: int kbhit(void);
    kbhit 函数功能:检测是否有键按下,如果有,则返回非 0 值(即真),否则返回 0(即假)。 调用 kbhit()函数的源程序必须包含 conio.h 文件。
    具有延时功能的函数是 delay(unsigned milliseconds)。 包含在 dos.h 头文件中。
    Delay()函数的功能是:将程序挂起 milliseconds 毫秒,即程序暂停或延时milliseconds 毫秒。
    当 kbhit 函数返回非 0 时,还要检测是否是 End 键。这需要调用 bioskey 库函数。但参数必须是 1,不能是 0。因为 bioskey(1)虽然返回用户所按键值,但没
    有接受键盘输入,不会影响其它函数(如 scanf 函数)接受有效输入。
    END 的键值定义为: #define END 0X4F00
    bioskey(1)判断是否是 END 的用法:
if (bioskey(1)= =END) 
 相关操作

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

  1. 发牌
    一付扑克牌 52 张共 4 种花色,用户可选择“1---发牌”将这 52 张牌随机发成 4敦;或选择“0----退出”退出程序。
    提示:用一个具有 52 个元素的数组(如 char p[52][5])存放这 52 张牌的内容,如 P_i 表示黑桃、H_i 表示红桃、C_i 表示梅花、D-i 表示方块;程序中可以首先初始化该数组,然后显示菜单等待用户选择输入,用户选择“发牌”,程序调用“发牌”函数;在发牌函数中,可使用 TC 中的产生随机数的函数(参看rand(),srand(),random()等函数的使用说明)一个随机数 m,选取一张牌p[m],将其与最前面的牌交换位置,即将选取的牌放在最前面;然后对数组 p 余下的牌重复选取操作,直到所有牌均重排列;最后按 13 行*4 列输出发牌结果。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

  1. 时钟模拟
    图形化界面,屏幕上显示圆形的模拟时钟表盘,显示 12 个刻度。时钟上有秒针、分针和时针指示,随着时间推移,秒针、分针和时针在表盘上移动。
    提示:在 dos.h 头文件中定义有如下结构类型
struct time
unsigned char ti_min; // Minutes 
unsigned char ti_hour; // Hours 
unsigned char ti_hund; // Hundredths of seconds 
unsigned char ti_sec; // Seconds 
;

可直接利用该类型表示时间类型。
在 dos.h 头文件中定义库函数 gettime(struct time *),该函数返回系统时钟。
此程序可通过读取系统时钟调整秒针、分针和时针位置。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

  1. 俄罗斯方块游戏
    用 C 语言实现常见的游戏-俄罗斯方块。应包含初始化新游戏,累积方块,消除方块,方块移动与变形,计分和调速等功能,方块界面和容器都可以自己设计。
    提示:可用以下数据结构记录一个点和一个方块形状:
typedef struct

int x,y;
Point;
typedef struct

Point a;
Point b;
Point c;
Point d;
int FkColor;
FkType; //方块类型

然后用一个 m*n 的长方形区域作为容器。通过 C 的图形函数库画出界面。采用延时函数使方块自动下降,并采取相应算法实现方块叠加、消除整行,计分的功能。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

8. 模拟指法练习程序(统计正确率及输入速度)

模拟指法测试程序:完成输入 N 行文字后,统计输入的正确率和输入速度。
要求:
程序运行后,屏幕首先输出提示信息,提示进入测试系统;先从键盘输入原文,自己定义原文最大长度;原文输入完成后,给出提示信息开始测试;依照原文从键盘输入,程序中统计输入的正确率和输入速度。输入完成后,屏幕显示最后统计结果。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

9. C 语言实现艺术清屏

我们在编制程序时,经常要用到清屏处理(清除屏幕上的内容),如 dos 下的 cls,Turbo C 下的 clrscr()等都具有清屏功能,但这些均为一般意义的清屏,并未显示其清屏规律。但有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:
开幕清屏;闭幕清屏;上清屏;下清屏;中清屏。为此,要求用 C 语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观。
提示:程序运行后,屏幕上输出满屏字符用于演示程序;主函数中调用几个清屏子函数,要求给出 5 个子函数:中心清屏(从中间向两边),矩形边清屏(从两边向中间),开屏式清屏(类似于展开扇形),闭幕式清屏(扇形收拢),自下清屏。调用一个子函数后,要恢复满屏再调用另一个,要求中间稍有延时。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

10. 五子棋游戏

图形化界面,玩家可以输入 F1-F5 选择人机对战模式,双人对战模式,保存当前游戏信息,读取游戏信息以及退出游戏选项。程序画出棋盘,可以通过键盘选择位置,进行下子。如果是人机对战模式,在玩家下完子后,电脑自动算出位置进行下子。当某一方到五子连成一线,能提示玩家某方获胜。
提示:棋盘位置行列等信息可以定义成常量。下子可以数组表示。首先编写相应程序画出棋盘棋子等。然后实现响应键盘输入,定位下子。最后实现将棋盘上的棋子位置信息写入文件以及从文件中读出。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

11. 高考录取系统

12. 其他

C语言课程设计程序的修改

源程序:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include
<time.h>
#include <windows.h>
#include
<iostream.h>
...................
void
identify()

FILE *fp;
char a[15];
char
b[100];
printf("\n 考生身份验证
");
printf("\n 请输入学号及密码,按ENTER键继续
");
printf("\n---------------------------------------------------------");
printf("\n
学号 密码 (学号与密码间以空格(SPACE)相隔开)
");
printf("\n---------------------------------------------------------\n");
scanf("%s
%s",a,b);
while
(1)
if((fp=fopen("students.txt","r"))==NULL)

printf("\n信息读取失败");
exit(0);

else


int i;
char num[1000][15];
char
passcode[1000][100];
for(i=0;i<1000;i++)

fscanf(fp,"%s,%s",&num[i][15],&passcode[i][100]);
if(strcmp(char
num[i][15],char a[15])==0)&&(strcmp(passcode[i][100],b[100])==0))
//unknown
menu(); //这是第52行//
else
printf("\n密码或学号错误");
exit(0);


fclose(fp);

.....................
汇编时显示:

--------------------Configuration: 考试系统 - Win32
Debug--------------------
Compiling...
考试系统.c
D:\课设\考试系统.c(52) : error
C2143: syntax error : missing ')' before 'type'
D:\课设\考试系统.c(52) : error
C2198: 'strcmp' : too few actual parameters
D:\课设\考试系统.c(54) : error C2181:
illegal else without matching if
执行 cl.exe 时出错.

考试系统.obj - 1 error(s), 0 warning(s)

怎么改呀!

程序设计基础实训

项目名称:
学生学分管理

系 别: 计算机工程系
专 业: 计算机网络技术
班 级: 0922211
学生姓名:
指导教师: 韦立蓉

北 京 信 息 职 业 技 术 学 院
2010年 1 月 日

一、项目背景介绍
(概要介绍此项目设计的意义和要求)
本程序为学生学分管理系统。本程序根据现实中的问题通过c语言形式编程。本程序要求能够登记学分,显示学分查询学分,修改学分,删除学分,统计学分。

二、程序功能描述:
(描述基本程序中每个函数的功能,给处各函数流程图)

1、
登记单流程图

2、
显示学分流程图
3、
查询学分流程图

4、
修改信息流程图

5、
删除信息流程图

6、
统计信息流程图

三、设计方案介绍
(基本思想函数调用的思路介绍)
1、主流程图

2、界面设计
(界面设计,函数的定义,功能设计、,罗列出所有需要解决的问题
函数调用问题,循环问题,查找问题,修改问题,查询问题,删除问题,比较问题。

3、变量定义
序号 变量名 变量性质(局部/全局) 功能 作用范围
1 typedef 全局 定义结构体类型 整体
2 Int 全局 定义五门课类型 整体
... Char 全局 定义学号班级姓名类型 整体

5、函数调用的类型

四、测试与分析
(简要介绍测试的作用及意义)
测试可以知道所编写的程序是否可行,通过实际的测试可以找出程序是否符合现实。通过测试和反复修改可以使程序更加人性化。
(一)测试列表
(以表格的形式给出,不少于10个)
测试数据或执行操作 执行结果 是否正确 测试人签名
调用主菜单 显示了主菜单 正确
选择主菜单里的1 请输入学生学生信息…. 正确
输出 有重复有乱码 否
查询 无 否
修改 按学号修改……. 是
按学号查询 显示了该信息 是
按班级查询 只显示里一名同学的信息 否
按学好删除 删除成功 是
须补考基础课的 所有学生信息都显示 否
可升学学生 显示了该显示的信息 是

(二)测试结果分析
(根据以下表格,如实填写并签名)
bug个数 错误类型 错误原因分析 是否修改 设计者签名
1 与count声名中的类型不匹配 少了void count() 是
2 错误 jia.c 19: 表达式语法错在 main 函数中 Scanf中少了&s 是
4 错误 jia.c 31: do语句中必须有while关键字在 main 函数中 没写while 是
5 错误 jia.c 30: 未定义的符号's'在 main 函数中 上面没int I; 是
6 错误 1.c 335: 表达式语法错在 count 函数中 Switch() 括号里没有变量 是
7

五、实训总结
(总结实训过程中的所使用的知识和已实现的功能,总结自己掌握理论知识和动手能力的程度,提出自己的不足之处及改进措施)

通过这一周的实训。我们充分运用了所学的东西编出了解决实际问题的程序。我们运用了函数的调用,循环,定义,比较,查找,删除等知识。通过实际动手,我更加深入的了解了课本上的知识。同时提高了我的动手能力。
实训中我找到了我许多的不足,以前我遇到不董的就会直接去问别人,不独自思考。试训中我学会了独自思考和团队合作。虽然我在编程当中遇到许多问题,但经过独自思考和学习解决了问题。最后编出了管理程序。
C语言学生学分管理程序代码

typedef struct student
char num[11],name[7],class[10];
int jichu,renwen,xuanxiu,zhuanye,shiyan;
STU;
STU st[37];
static int n;
void menu();
void input();
void print();
void query();
void modi();
void del();
void count();
main()
int s;
do
menu();
printf("\n\t\t\t\t 请选择:");
scanf("%d",&s);
switch(s)
case 0:break;
case 1:input();break;
case 2:print();break;
case 3:query();break;
case 4:modi();break;
case 5:del();break;
case 6:count();break;
default:printf("选择无效!");

while(s!=0);
getch();

void menu()
clrscr();
printf("\t\t\t****************************\n");
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*** 3-查询学生学分 ***\n");
printf("\t\t\t*** 4-修改学生学分 ***\n");
printf("\t\t\t*** 5-删除学生学分 ***\n");
printf("\t\t\t*** 6-统计学生学分 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t****************************\n");

void input()
do
printf("请输入学生信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n");
scanf("%s%s%s%d%d%d%d%d",st[n].num,st[n].name,st[n].class,&st[n].jichu,&st[n].zhuanye,&st[n].xuanxiu,&st[n].renwen,&st[n].shiyan);
n++;
printf("是否继续输入?(n-退出,任意键继续):");
while(getche()!='n');

void print()
int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=0;i<n;i++)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();

void menu1()
clrscr();
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*** 3-按班级查询 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");

void query1()
char sn[11];
int i;
printf("请输入要查询的学号:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].num)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\按任意键继续");
break;

else printf("\n对不起!没有该学号,任意键继续");
getch();

void query2()
char sn[7];
int i;
printf("请输入要查询的姓名:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].name)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\按任意键继续");
break;
else printf("\n对不起!没有该姓名,任意键继续");
getch();

void query3()
char sn[10];
int i;
printf("请输入要查询的班级:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].class)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\按任意键继续");
break;

else printf("\n对不起!没有该班,任意键继续");
getch();

void query()
int s;
do
menu1();
printf("\n\t\t\t\t 请选择:");
scanf("%d",&s);
switch(s)
case 0:break;
case 1:query1();break;
case 2:query2();break;
case 3:query3();break;
default:printf("选择无效!");

while(s!=0);
getch();

void menu2()
clrscr();
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*** 3-按班级修改 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");

void modi1()
char sn[11];
int i;
printf("请输入要修改学分学生的学号:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].num)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n");
scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);

printf("是否继续输入?(n-退出,任意键继续):");
while(getche()!='n');
break;

getch();

void modi2()
char sn[7];
int i;
printf("请输入要修改学分学生的姓名:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].name)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

printf("请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n");
scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);

printf("是否继续输入?(n-退出,任意键继续):");
while(getche()!='n');
break;

getch();

void modi3()
char sn[10];
int i;
printf("请输入要修改学分学生的班级:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].class)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

printf("请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n");
scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);

printf("是否继续输入?(n-退出,任意键继续):");
while(getche()!='n');
break;

getch();

void modi()
int s;
do
menu2();
printf("\n\t\t\t\t 请选择:");
scanf("%d",&s);
switch(s)
case 0:break;
case 1:modi1();break;
case 2:modi2();break;
case 3:modi3();break;
default:printf("选择无效!");

while(s!=0);
getch();

void menu3()
clrscr();
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*** 3-按班级删除 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");

void del1()
char sn[11];
int i,j;
printf("请输入要删除学分学生的学号:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].num)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n是否删除(任意键确认,n\取消)");
if(getche()!='n');
if(i!=n-1);
for(j=i;j<n-1;j++)
st[j]=st[j+1];
n--;
printf("\n该记录已删除");
getch();
break ;



else printf("\n对不起!没有该学号,任意键继续");

void del2()
char sn[7];
int i,j;
printf("请输入要删除学分学生的姓名:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].name)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n是否删除(任意键确认,n\取消)");
if(getche()!='n');
if(i!=n-1);
for(j=i;j<n-1;j++)
st[j]=st[j+1];
n--;
printf("\n该记录已删除");
getch();
break ;



else printf("\n对不起!没有该学号,任意键继续");

void del3()
char sn[10];
int i,j;
printf("请输入要删除学分学生的班级:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].class)==0)
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n是否删除(任意键确认,n\取消)");
if(getche()!='n');
if(i!=n-1);
for(j=i;j<n-1;j++)
st[j]=st[j+1];
n--;
printf("\n该记录已删除");
getch();
break ;



else printf("\n对不起!没有该学号,任意键继续");

void del()
int s;
do
menu3();
printf("\n\t\t\t\t 请选择:");
scanf("%d",&s);
switch(s)
case 0:break;
case 1:del1();break;
case 2:del2();break;
case 3:del3();break;
default:printf("选择无效!");

while(s!=0);
getch();

void menu4()
clrscr();
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*** 3-需补考专业课的 ***\n");
printf("\t\t\t*** 4-需补考选修课的 ***\n");
printf("\t\t\t*** 5-需补考人文课的 ***\n");
printf("\t\t\t*** 6-需补考实验课的 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");


void count1()
int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

getch();


void count2()
int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=0;i<n;i++)
if(st[i].jichu<60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

getch();
void count3()
int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye<60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

getch();

void count4()
int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu<60&st[i].renwen>=60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

getch();

void count5()
int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen<60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

getch();

void count6()
int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan<60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

getch();

void count()
int s;
do
menu4();
printf("\n\t\t\t\t 请选择:");
scanf("%d",&s);
switch(s)
case 0:break;
case 1:count1();break;
case 2:count2();break;
case 3:count3();break;
case 4:count4();break;
case 5:count5();break;
case 6:count6();break;

default:printf("选择无效!");

while(s!=0);
getch();

是否可以解决您的问题?
参考技术A //自定义控件, 然后在工具箱拖过来用  再把BackColor 设置为Transparent
public partial class TransparentListBox : ListBox
    
        public TransparentListBox()
        
            this.SetStyle(ControlStyles.UserPaint, true);
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        
        protected override void OnSelectedIndexChanged(EventArgs e)
        
            this.Invalidate();
            base.OnSelectedIndexChanged(e);
        
        protected override void OnPaint(PaintEventArgs e)
        
            if (this.Focused && this.SelectedItem != null)
            
                Rectangle itemRect = this.GetItemRectangle(this.SelectedIndex);
                e.Graphics.FillRectangle(Brushes.Green, itemRect);
            
            for (int i = 0; i < Items.Count; i++)
            
                e.Graphics.DrawString(this.GetItemText(Items[i]), this.Font, new SolidBrush(this.ForeColor), this.GetItemRectangle(i));
            
            base.OnPaint(e);
        
    

追答

?

参考技术B if(strcmp(char
num[i][15],char a[15])==0)&&(strcmp(passcode[i][100],b[100])==0))

strcmp调用的时候只要把字符串名传进去。

if (strcmp(num[i], a) == 0 && strcmp(passcode[i], b) == 0)追问

fscanf(fp,"%s,%s",&num[i][15],&passcode[i][100]);

这一句呢?
students.txt中的文件录入格式是 学号,密码 为了省事儿全都是数字,这么提取对不对呀?就我这个程序而言,信息提取的对吗?

追答

输入也是只要传地址, 应为字符串名字就是他的地址,所以应该像下面这样
fscanf(fp,"%s,%s",num[i], passcode[i]);

另外一个问题,输入的时候“%s,%s",格式控制这里这个分隔符要注意,如果你存储的时候是以','(逗号)隔开的,输入时就要加上逗号"%s,%s",如果存储时是空格隔开的,不要把逗号加上去,要用”%s%s"
num,passcode -> "%s,%s"
num passcode -> “%s%s"

本回答被提问者采纳
参考技术C 第一个strcmp前面加一个(。

以上是关于C语言课程设计[2023-05-27]的主要内容,如果未能解决你的问题,请参考以下文章

C/C++学生成绩记录簿[2023-05-27]

C/C++基于散列表的学生管理系统[2023-05-27]

.NET周报 5月第4期 2023-05-27

C语言课程设计程序的修改

c语言学生成绩管理系统课程设计

C语言课程设计