網站首頁 編程語言 正文
這些天因為補修c語言課設,在花費了一段時間后寫完了這個課設,課設的要求如下:
考勤信息記錄了學生的缺課情況,它包括:缺課日期、第幾節課、課程名稱、學生姓名、缺課類型(遲到、早退、請假及曠課)。試設計一考勤管理系統,使之能提供以下功能:
(1) 錄入學生的缺課記錄;
(2) 修改某個學生的缺課記錄;
(3) 查詢某個學生的缺課情況;
(4) 統計某段時間內,曠課學生姓名及曠課次數,按曠課次數由多到少排序;
(5) 統計某段時間內,有學生曠課的課程及曠課人次,按曠課人次由多到少排序;
(6) 系統以菜單方式工作。
本程序由visual studio 2017編寫
我會先將程序放上來然后后面慢慢加注釋,程序的大概思路是設計三個結構體,考勤信息結構體負責保存每一條缺課信息,其中包括學生信息和課程信息,每次添加考勤信息的時候,剩下的兩個學生和課程結構體會自動從里面添加所需要的信息,整個程序的功能實現也是建立在三個結構體的基礎上的。
#define _CRT_SECURE_NO_WARNINGS #define N 1000 #define M 100 #include#include #include struct kaoqing { ?? ?//int total;//曠課總節數 ?? ?int number;// 曠課的第幾節 ?? ?char coure_name[20];//課程名稱 ?? ?char stu_name[20];//學生名字 ?? ?char type[20];//課程類型 ?? ?int year; ?? ?int month; ?? ?int day; }; struct stu { ?? ?char stu_name2[20]; ?? ?int num;//每個學生的曠課總節數,曠課次數 }; struct course { ?? ?char coure_name2[20];//課程名稱 ?? ?int num;//本門課程曠課人次 }; struct kaoqing K[N+1]= { 0 }; struct stu S[M + 1] = { 0 }; struct course C[M + 1] = { 0 }; int add_course(char name[], int *t) { ?? ?int z = *t; ?? ?int i = 1; ?? ?int flag = 0; ?? ?for (; i < z; i++) { ?? ??? ?if (strcmp(C[i].coure_name2, name) == 0) { ?? ??? ??? ?flag = 1; ?? ??? ?} ?? ?} ?? ?if (flag) { ?? ??? ?return 1;// ?? ?} ?? ?strcpy(C[i].coure_name2, name); ?? ?++(*t); ?? ?return 0; } int add_stu(char name[],int *t) { ?? ?int m = *t; ?? ?int i = 1; ?? ?int flag = 0; ?? ?for(;i = by) && (K[j].year <= ey)) { ?? ??? ??? ??? ?if ((K[j].month >= bm) && (K[j].month <= em)) { ?? ??? ??? ??? ??? ?if ((K[j].day >= bd) && (K[j].day <= ed)) { ?? ??? ??? ??? ??? ??? ?if (strcmp(K[j].coure_name, C[i].coure_name2) == 0) { ?? ??? ??? ??? ??? ??? ??? ?++C[i].num; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?i = 1; j = 1; ?? ?for (; i < m; i++) ?? ?{ ?? ??? ?imax = i; ?? ??? ?for (j = i + 1; j < m; j++) ?? ??? ?{ ?? ??? ??? ?if (C[j].num > C[imax].num) { ?? ??? ??? ??? ?imax = j; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?temp = C[imax].num; ?? ??? ?C[imax].num = C[i].num; ?? ??? ?C[i].num = temp; ?? ?} ?? ?i = 1; j = 1; ?? ?printf("從%d年%d月%d日到%d年%d月%d日這段時間內,曠課情況如下:\n", by, bm, bd, ey, em, ed); ?? ?for (; i < m; i++) { ?? ??? ?//if (C[i].num > 0) { ?? ??? ??? ?printf("%s ? 曠課人次%d\n", C[i].coure_name2, C[i].num); ?? ??? ?//} ?? ??? ?for (j = 1; j < n; j++) { ?? ??? ??? ?if (strcmp(K[j].coure_name, C[i].coure_name2) == 0) { ?? ??? ??? ??? ?printf("缺課日期:%d年%d月%d日 ? 第%d節課 ?%s ? %s\n", K[j].year, K[j].month, K[j].day, K[j].number, K[j].stu_name, K[j].type); ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?i = 1; ?? ?for (; i < m; i++) { ?? ??? ?C[i].num = 0; ?? ?} } void Info_show(int n,int m) { ?? ?int imax; int temp; ?? ?int i = 1,j=1; ?? ?int by, bm, bd,ey,em,ed; ?? ?for (; i < n; i++) { ?? ??? ??? ?printf("%s缺課日期:%d年%d月%d日 第%d節課 %s %s\n",K[i].stu_name,K[i].year, K[i].month, K[i].day, K[i].number, K[i].coure_name, K[i].type); ?? ?} ?? ?printf("請輸入統計時間段的起點時間:"); ?? ?scanf("%d%d%d", &by, &bm, &bd); ?? ?printf("請輸入統計時間段的終點時間:"); ?? ?scanf("%d%d%d", &ey, &em, &ed); ?? ?i = 1; j = 1; ?? ?for (; i < m; i++) { ?? ??? ?for (j=1; j < n; j++) { ?? ??? ??? ?if ((K[j].year >= by) && (K[j].year <= ey)) {//滿足年份則不需要管月份和日期 ?? ??? ??? ??? ?if ((K[j].month >= bm) && (K[j].month <= em)) {//不滿足年份滿足月份則不需要管 ?? ??? ??? ??? ??? ?if ((K[j].day >= bd) && (K[j].day <= ed)) { ?? ??? ??? ??? ??? ??? ?if (strcmp(K[j].stu_name,S[i].stu_name2)==0) { ?? ??? ??? ??? ??? ??? ??? ?++S[i].num; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?i = 1; j = 1; ?? ?for (; i < m; i++) ?? ?{ ?? ??? ?imax = i; ?? ??? ?for (j = i + 1; j < m; j++) ?? ??? ?{ ?? ??? ??? ?if (S[j].num > S[imax].num) { ?? ??? ??? ??? ?imax = j; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?temp = S[imax].num; ?? ??? ?S[imax].num = S[i].num; ?? ??? ?S[i].num = temp; ?? ?} ?? ?i = 1; j = 1; ?? ?printf("從%d年%d月%d日到%d年%d月%d日這段時間內,曠課情況如下:\n",by,bm,bd,ey,em,ed); ?? ?for (; i < m; i++) { ?? ??? ?if (S[i].num > 0) { ?? ??? ??? ?printf("%s ? 曠課次數%d\n", S[i].stu_name2, S[i].num); ?? ??? ?} ?? ??? ?for (j=1; j < n; j++) { ?? ??? ??? ?if (strcmp(K[j].stu_name, S[i].stu_name2) == 0) { ?? ??? ??? ??? ?printf("缺課日期:%d年%d月%d日 ? 第%d節課 ?%s ? %s\n", K[j].year, K[j].month, K[j].day, K[j].number, K[j].coure_name, K[j].type); ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?i = 1; ?? ?for (; i < m; i++) { ?? ??? ?S[i].num = 0; ?? ?} } void Info_change(int n) { ?? ?char name[20]; ?? ?int i=1; ?? ?int flag = 0;//記錄是否修改 ?? ?int year, month, day, number; ?? ?printf("請輸入想修改的學生姓名:"); ?? ?scanf("%s", name); ?? ?printf("請輸入想修改記錄的時間和節數:"); ?? ?scanf("%d%d%d%d", &year, &month, &day, &number); ?? ?for (; i < n; i++) { ?? ??? ?if ((strcmp(K[i].stu_name,name) == 0)&&((K[i].year==year)&&(K[i].month==month)&&(K[i].day==day)&&(K[i].number==number))) { ?? ??? ??? ?printf("請依次輸入新的該條信息!"); ?? ??? ??? ?printf("請輸入缺課日期,格式為年 月 日:"); ?? ??? ??? ?scanf("%d%d%d", &K[i].year, &K[i].month, &K[i].day); ?? ??? ??? ?printf("請輸入缺課課程為當日第幾節:"); ?? ??? ??? ?scanf("%d", &K[i].number); ?? ??? ??? ?printf("請輸入缺課課程名稱:"); ?? ??? ??? ?scanf("%s", K[i].coure_name); ?? ??? ??? ?printf("請輸入缺課類型:"); ?? ??? ??? ?scanf("%s", K[i].type); ?? ??? ??? ?printf("請輸入缺課學生姓名:"); ?? ??? ??? ?scanf("%s", K[i].stu_name); ?? ??? ??? ?printf("修改成功!"); ?? ??? ??? ?++flag; ?? ??? ?} ?? ?} ?? ?if (!flag) { ?? ??? ?printf("修改失敗!請聯系管理員進行錯誤排查!"); ?? ?} } void Info_find(int n) { ?? ?char name[20]; ?? ?int i = 1; ?? ?printf("請輸入查找學生姓名:"); ?? ?scanf("%s", name); ?? ?printf("%s的缺課情況如下:\n",name); ?? ?for (; i < n; i++) { ?? ??? ?if (strcmp(K[i].stu_name, name) == 0) { ?? ??? ??? ?printf("缺課日期:%d年%d月%d日 第%d節課 %s %s\n", K[i].year, K[i].month, K[i].day, K[i].number, K[i].coure_name, K[i].type); ?? ??? ?} ?? ?} } void Info_init(int *x,int *y,int *z)? { ?? ?/* ?? ?int number;// 曠課的第幾節 ?? ?char coure_name[20];//課程名稱 ?? ?char stu_name[20];//學生名字 ?? ?char type[20];//課程類型 ?? ?int year; ?? ?int month; ?? ?int day; ?? ?*/ ?? ?int a_s; ?? ?int a_c; ?? ?int X = *x; ?? ?int Y = *y; ?? ?int Z = *z; ?? ?int numbera;// 曠課的第幾節 ?? ?char coure_namea[20];//課程名稱 ?? ?char stu_namea[20];//學生名字 ?? ?char typea[20];//課程類型 ?? ?int yeara; ?? ?int montha; ?? ?int daya; ?? ?FILE *fp; ?? ?if ((fp = fopen("INFO.txt", "r")) == NULL) { ?? ??? ?printf("數據讀入失敗!請聯系管理員進行錯誤排查!"); ?? ??? ?exit(0); ?//退出程序(結束程序) ?? ?} ?? ?while (fscanf(fp, "%d%s%s%s%d%d%d", &numbera, coure_namea, stu_namea, typea, &yeara, &montha, &daya) == 7) { ?? ??? ?K[*x].number = numbera; ?? ??? ?strcpy(K[*x].coure_name,coure_namea); ?? ??? ?strcpy(K[*x].stu_name, stu_namea); ?? ??? ?strcpy(K[*x].type, typea); ?? ??? ?K[*x].year = yeara; ?? ??? ?K[*x].month = montha; ?? ??? ?K[*x].day = daya; ?? ??? ?++(*x); ?? ??? ?printf("%d\n", *x); ?? ??? ?a_s = add_stu(stu_namea,y); ?? ??? ?a_c = add_course(coure_namea,z); ?? ??? ?/*if (!a_s) { ?? ??? ??? ?printf("%d\n", *y); ?? ??? ??? ?printf("學生姓名數組初始化成功!\n"); ?? ??? ?} ?? ??? ? ?? ??? ?if (!a_c) { ?? ??? ??? ?printf("%d\n", *z); ?? ??? ??? ?printf("課程名稱數組初始化成功!\n"); ?? ??? ?}*/ ?? ?} ?? ?fclose(fp); } void Info_save(int n) { ?? ?int i=1; ?? ?FILE * fp; ?? ?if ((fp = fopen("INFO.txt", "w")) == NULL) { ?? ??? ?printf("數據讀入失敗!請聯系管理員進行錯誤排查!"); ?? ??? ?exit(0); ?//退出程序(結束程序) ?? ?} ?? ?for (; i < n; i++) { ?? ??? ?fprintf(fp, "%d %s %s %s %d %d %d\n", K[i].number, K[i].coure_name, K[i].stu_name, K[i].type, K[i].year, K[i].month, K[i].day); ?? ?} ?? ?fclose(fp); } void Info_in(int *w,int *z,int *v) { ?? ?char name[20]; ?? ?char c_name[20]; ?? ?int flag1, flag2; ?? ?int n = *w;//記錄數組的控制數 ?? ?int m = *z;//學生數組的控制數 ?? ?int o = *z;//課程數組的控制數 ?? ?printf("請依次輸入學生的缺課情況:"); ?? ?printf("請輸入缺課日期,格式為年 月 日:"); ?? ?scanf("%d%d%d", &K[n].year, &K[n].month, &K[n].day); ?? ?printf("請輸入缺的課程為當日第幾節:"); ?? ?scanf("%d", &K[n].number); ?? ?printf("請輸入缺的課程的名稱:"); ?? ?scanf("%s", K[n].coure_name); ?? ?strcpy(c_name, K[n].coure_name); ?? ?flag1 = add_course(c_name, v); ?? ?if (!flag1) ?? ?{ ?? ??? ?printf("課程名稱添加成功"); ?? ?} ?? ?printf("請輸入缺課的學生姓名:"); ?? ?scanf("%s", K[n].stu_name); ?? ?strcpy(name, K[n].stu_name); ?? ?flag2=add_stu(name,z); ?? ?if (!flag2) ?? ?{ ?? ??? ?printf("學生姓名添加成功"); ?? ?} ?? ?printf("請輸入缺課類型:"); ?? ?scanf("%s", K[n].type); ?? ?printf("添加成功!"); ?? ?++(*w); } int main() { ?? ?int X = 1; int Y = 1; int Z = 1; ?? ?Info_init(&X,&Y,&Z); ?? ?while (1) ?? ?{ ?? ??? ?system("cls"); ?? ??? ?int n; ?? ??? ?printf(" ? ? ? ? ? ?*************************************************************************\n"); ?? ??? ?printf(" ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ??? ?printf(" ? ? ? ? ? ?** ? ? ? ? ? ? ? -------歡迎使用考勤管理系統------ ? ? ? ? ? ? ? ? ? ? **\n"); ?? ??? ?printf(" ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ??? ?printf(" ? ? ? ? ? ?*************************************************************************\n\n"); ?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?1.缺課信息登記 ? ?]\n\n"); ?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?2.缺課信息修改 ? ?]\n\n"); ?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?3.缺課信息查詢 ? ?]\n\n"); ?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?4.曠課學生信息展示]\n\n"); ?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?5.課程情況展示 ? ?]\n\n"); ?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?6.退出系統 ? ? ? ?]\n\n"); ?? ??? ?printf("請輸入需要使用的功能數字:"); ?? ??? ?scanf("%d", &n); ?? ??? ?while (n < 1 || n > 7) { ?? ??? ??? ?printf("\n\n代碼輸入有誤,請您重新輸入:"); ?? ??? ??? ?scanf("%d", &n); ?? ??? ?} ?? ??? ?switch (n) { ?? ??? ?case 1:Info_in(&X,&Y,&Z); break; ?? ??? ?case 2:Info_change(X); break; ?? ??? ?case 3:Info_find(X); break; ?? ??? ?case 4:Info_show(X,Y); break; ?? ??? ?case 5:Coure_show(X,Z); break; ?? ??? ?case 6:exit(0); ?? ??? ?} ?? ??? ?Info_save(X); ?? ??? ?system("pause"); ?? ?} ?? ?return 0; }
原文鏈接:https://blog.csdn.net/weixin_46497661/article/details/118479367
相關推薦
- 2022-09-18 詳解React?hooks組件通信方法_React
- 2022-06-28 C++哈希表之線性探測法實現詳解_C 語言
- 2022-11-27 Windows批處理文件(.bat和.cmd)及區別詳解_DOS/BAT
- 2023-01-19 GO語言的map類型實例詳解_Golang
- 2022-08-27 Python服務器創建虛擬環境跑代碼_python
- 2022-08-31 C語言數據結構之單鏈表與雙鏈表的增刪改查操作實現_C 語言
- 2021-12-11 C語言SetConsoleCursorPosition函數使用方法_C 語言
- 2022-07-15 Python打印數據類型的全過程_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支