




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计 计算机学院14060307班第67页 共67页 课程设计实验报告课程管理系统计算机科学与工程学院14060307班董永博佳兴晨光炳舒 静目录题目3分析过程与思路3算法5函数模块介绍9源程序10运行结果36课程设计总结42题目课程管理系统分析过程与思路课程管理系统首先要能够分别实现课程信息的增加、删除、查询、修改。为了增加程序的实用性,应当能够将输入的课程信息通过存文件的方式将课程信息存入硬盘。而使用系统的可能是学生和管理员两类,因此要实现根据登录类型来开放
2、应有的功能。由于课程信息包含很多成员,例如课程编码、课程名等。因此应该用链表对信息进行记录,由于不清楚课程总数,因此需要用动态链表。动态链表的使用需要声明合适的结构体,数据域中应包含课程所包含的各个成员、指针域用来指向下一个结点。动态链表的建立需要用到malloc函数。对已经建立的链表需要存入文件,需要用到fwrite、fread、feof等文件处理函数,保存文件要多次用到,因此应该独立做一个函数。删除函数要用到诸如free函数,为了防止删除的结点为首结点,删除后找不到头结点,因此删除函数应该是一个指针函数,用以返回删除后的新的头结点。登录函数要返回一个值用以在其他函数中判断登录类型,以便针对
3、用户开放相应的功能。课程管理系统课程管理系统登录key学生登录mainpage()管理员登陆mainpage()查询serch()查询serch()输入inpt()添加add()删除dele()修改alter()程序功能结构示意图算法NNY21开始输入登录类型oO=?学生登录管理员登录mainpage()key函数简单算法字符串相等11输入mm=?serch()退出inpt()结束O=?mainpage函数算法简单示意Save函数21!17&!2开辟新节点输入新节点数据输入zz=?inpt函数算法简单示意开辟新节点结点相连YYNYNYNYserch函数查看方式n=0?打开文件文件为空开辟结点读
4、取文件数据已读完文件为空Mainpage函数输出一个结点完毕?查询方式结点遍历查找输出重新?操作?添加add修改alter删除deleSerch函数算法简单示意NNY输入数据满足条件异常处理示意pp1-前一结点p2-当前结点p1-next=p2删除首结点head=p1-nextfree(p2)return(head)free(p1)删除函数简单示意函数模块介绍void inpt();/输入函数:用以输入一系列数据,在文件中没有课程信息数据或者需要全部更新时使用该函数模块。void serch();/查询函数,用以查询已经存储的课程信息。并通过调用其他函数,来对课程信息进行一系列操作。void
5、alter(int all,int b,lesson *head);/修改函数,用以小规模的修改已经存储的课程信息。lesson *dele(int all,int b,lesson *head);/删除函数,用以删除一些已经失效了的课程信息。通过返回新链表的头指针,以便对新链表进行一系列操作。void save(int n,lesson *p);/保存函数,用以将已经建立的链表存入硬盘,便于随时使用。void output(struct lesson *q2);/输出函数,用以将课程信息输出到屏幕上显示出来。void add(int all,lesson *head);/添加,用以在原课程信
6、息的基础上添加新的课程信息。void mainpage();/主界面函数int key();/登录函数,通过返回值来判断用户类型,以开放不同的功能。源程序#include#include#include#define len sizeof(struct lesson)#define print printf(输入数据有误,请重新输入!n);int n,temp,o;struct lessonchar num5;/课程编码char proj10;/课程名char crdt4;/学分char hour3;/学时char term2;/学期char week5;/周次char date5;/周日期(
7、周几)char period5;/节次char room6;/教室struct lesson *next;/结构体指针;void inpt();/输入函数void serch();/查询函数void alter(int all,int b,lesson *head);/修改函数lesson *dele(int all,int b,lesson *head);/删除函数void save(int n,lesson *p);/保存函数void output(struct lesson *q2);/输出函数void add(int all,lesson *head);/添加void mainpage
8、();/主界面函数int key();/登录函数int main()田晨光o=key();/调用登录函数mainpage();/调用主界面 return 0;void mainpage()/主界面函数永博int m=1;while(m=1)printf(*n);/ printf(* 输入1增加课程 *n); printf(* 输入2查询课程 *n); printf(* 输入3退出程序 *n); printf(*nn);doscanf(%d,&m);if(m3) print;/该循环体使用户输入选项代码并判断代码是否合理while(m3); s
9、ystem(CLS);/清除屏幕内容 switch(m)/通过switch语句转向用户选择的功能函数 case 1:inpt();break;/调用输入函数 case 2:serch();break;/调用查询函数 case 3:exit(0);break;/退出void inpt()/输入函田晨光if(o=1)system(CLS);/清屏printf(没有权限,请联系管理员!n);mainpage();int k=1,z,x,i;struct lesson *head;/声明一个lesson类型的结构体指针,作为头指针。struct lesson *p1,*p2;
10、/声明两个lesson类型的结构体指针,建造链表。p1=p2=(struct lesson *)malloc(len);/使两个结构体指针都指向第一个节点n=0;/n用来从零开始记录当前为第几节点 while(k=1)/循环输入n=n+1;/循环体每执行一次使n加1printf(请输入课程编码(1-4位字符串 例:001)n);/输入数据doscanf(%s,&p1-num);if(strlen(p1-num)4) print;while(strlen(p1-num)4);printf(请输入课程名(1-10位字符串 例:math)n);doscanf(%s,&p1-proj);if(strl
11、en(p1-proj)10) print; while(strlen(p1-proj)10);printf(请输入学分(两位实数,整数部分1位,小数部分1位,例:1.5)n);dox=0;scanf(%s,&p1-crdt);if(strlen(p1-crdt)4) print;elsefor(i=0;icrdt)i57|(p1-crdt)icrdt)4|x=1);printf(请输入学时(两位整数 例:32)n);dox=0;scanf(%s,&p1-hour);if(strlen(p1-hour)3) print;elsefor(i=0;ihour)i57|(p1-hour)ihour)3
12、|x=1);printf(请输入学期(以为整数 例:2)n);dox=0;scanf(%s,&p1-term);if(strlen(p1-term)2) print;elsefor(i=0;iterm)i57|(p1-term)iterm)2|x=1);printf(请输入周次(例1-17)n);doscanf(%s,&p1-week);if(strlen(p1-week)5) print; while(strlen(p1-week)5); printf(请输入日期(三位周日期 例:mon、sat)n);doscanf(%s,&p1-date);if(strlen(p1-date)3) pri
13、nt; while(strlen(p1-date)3); printf(请输入节次(例:5-6)n);doscanf(%s,&p1-period);if(strlen(p1-period)5) print; while(strlen(p1-period)5);printf(请输入教室(例:2-201)n);doscanf(%s,&p1-room);if(strlen(p1-room)6) print; while(strlen(p1-room)6);if(n=1) head=p1;/如果n=1,(即当前为第一个节点),就使head指向头结点,作为头指针。system(CLS);/输入完毕,清屏
14、printf(*n);/输出提示信息printf(* 输入1继续添加 *n); printf(* 输入2保存并退出 *n); printf(*n);doscanf(%d,&z);if(z2) print;/该循环体使用户输入选项代码并判断代码是否合理while(z2); if(z=1)/如果用户选择继续添加,进入该分支p1=(struct lesson *)malloc(len);/利用malloc函数,开辟一个新节点 (p2-next)=p1;/令前一个结构体的next指针指向后一个节点,将两个结构体链接起来p2=p1;/令另一个指针也指向下一个节点,便于下次使用else/如果用户选择保存并
15、退出选项,进入该分支。 (p2-next)=NULL;/令最后一个节点的next指针指向NULL; break;/跳出循环n=0-1;save(n,head);/调用save函数,将已经建立的链表存入文件mainpage();/返回主界面void save(int m,lesson *p)/save函数,将数据保存到硬盘的文件中静FILE *fp;/声明一个文件指针lesson *p1=p;/声明一个结构体指针fp=fopen(D:data.txt,wb);/以写为目的打开D:data.txt路径下的二进制文件while(p-next!=NULL)/当指针p指向的节点
16、中的next指针不为空时(证明没有保存完毕),进入循环体 if(fwrite(p,len,1,fp)!=1) printf(保存文件失败!n);/用fwrite函数的返回值来反映是否成功保存每一个节点 else printf(保存文件成功!n);p=p1-next;/使结构体指针指向下一个节点;p1=p;if(p-next=NULL&n=-1)if(fwrite(p,len,1,fp)!=1) printf(保存文件失败!n);/用fwrite函数的返回值来反映是否成功保存每一个节点 else printf(保存文件成功!n); fclose(fp);/关闭文件void serch()/查询函
17、数(包含节点的删除与修改董永博int i,k,m,j=1;/声明一些需要用到的变量char p10;/声明一个字符型数组,用以存放用户输入的需要查询的相关信息struct lesson *q1,*q2,*head=NULL;/声明读取链表所需要的三个结构体指针FILE *fp;/声明一个文件指针do fp=fopen(D:data.txt,rb);/以读取为目的打开D:data.txt路径下的二进制文件 if(ferror(fp) clearerr(fp);/如果打开文件错误,立即清除错误后产生的标记,便于文件下次正常打开 if(fp=NULL)/如果文件指针指向NU
18、LL(代表该文件不存在)则进入该分支 printf(无法打开文件!n); exit(0); q1=q2=(struct lesson *)malloc(len);/文件打开后,在内存中开辟空间,存放文件读取到的数据 fread(q1,len,1,fp);/读取第一个节点 if(feof(fp)/用feof函数的返回值来判断该文件是否为空文件 printf(没有存储课程信息!n); mainpage(); q2=q1;/两个指针同时指向第一个节点 m=0;/将m 清零,便于接下来记录节点总数 while(!feof(fp)/利用feof函数的返回值来判断文件是否读取完毕 m=m+1;/记录节点数
19、 if(m=1)head=q1;/如果为第一个节点,使head指针指向该节点 q1=(struct lesson *)malloc(len);/继续开辟下一个节点 q2-next=q1;/将新节点与上一个节点链接起来 q2=q1; fread(q1,len,1,fp);/读取文件内容,存入新节点 q2-next=NULL;/文件读取完毕后,令链表的最后一个节点的next指针指向NULL q1=q2=head;/两个结构体指针重新指向头结点printf(*n);/输出提示信息 printf(* 输入0查看全部课程 *n); printf(* 输入1按课程名查询 *n); printf(* 输入2
20、按课程编码查询 *n); printf(* 输入3按周日期查询 *n); printf(* 输入4按起始周查询 *n);printf(* 输入5返回主界面 *n); printf(*nn); do scanf(%d,&k); if(k5) print; while(k5); switch(k) case 0:/当用户选择查看全部课程信息时,进入该分支printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n); for(i=1;inext;/指针指向下一个结点 q2=q1;q2-next=NULL; break; case 1:/当用户选择按课程名查询时,进入该分支 print
21、f(请输入课程名!(1-10位字符串 例:math)n); do scanf(%s,&p); if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);/输入要查询的课程名 temp=0;/将temp归零,便于记录所查询到的节点为第几节点,便于下面修改函数和删除函数的查找 do if(!strcmp(q2-proj,p)/通过字符串比较来查找需要查找的信息 temp=temp+1;/记录节点数 printf(查询到%s相关的课程信息为:nn,p);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n); output(q2
22、);/调用输出函数 break;/跳出循环 else/如果内容与用户输入字符串不相等,查找下一个节点j=j+1; q1=q2-next; q2=q1; while(q2-next!=NULL); if(temp=0) printf(未查询到相关课程!n);/如果temp等于零,则代表没有查询到相关信息elseprintf(*n);/如果查询到相关课程 printf(* 输入0修改课程信息 *n); printf(* 输入1删除课程信息 *n);printf(* 输入2添加课程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);i
23、f(o=1) printf(对不起,您没有权限!请联系管理员!n);/如果学生登录,由于key函数返回值为1,就不开放删除修改功能else/如果是管理员登录,则可以使用删除,修改,添加等功能switch(k)/通过管理员的选择代码,分别调用不同的函数 case 0:alter(m,j,head);break;/调用修改函数,将查询到的课程的位置,链表的总节点数。链表的头指针传给函数 case 1:head=dele(m,j,head);break;/调用删除函数,将返回的指针作为下一次打开的头指针 case 2:add(m,head);break;/调用添加函数,在链表的后面继续添加 brea
24、k; case 2: printf(请输入课程编码(1-4位字符串 例:001)n);/输入数据 do scanf(%s,&p); if(strlen(q1-num)4) print; while(strlen(q1-num)4); temp=0; do if(!strcmp(q2-num,p) temp=temp+1; printf(查询到编码为%s的课程信息为:nn,p);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-next!=NULL);
25、 if(temp=0) printf(未查询到相关课程!n);elseprintf(*n); printf(* 输入0修改课程信息 *n); printf(* 输入1删除课程信息 *n); printf(* 输入2添加课程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(对不起,您没有权限!请联系管理员!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:add(m,head
26、);break; break; case 3: printf(请输入周日期!(三位周日期 例:mon、sat)n); do scanf(%s,&p); if(strlen(q1-date)3) print; while(strlen(q1-date)3); temp=0; do if(!strcmp(q2-date,p)temp=temp+1; printf(查询到%s的课程信息为:nn,p);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-nex
27、t!=NULL); if(temp=0) printf(未查询到相关课程!nn);elseprintf(*n); printf(* 输入0修改课程信息 *n); printf(* 输入1删除课程信息 *n);printf(* 输入2添加课程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(对不起,您没有权限!请联系管理员!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:a
28、dd(m,head);break; break; case 4: printf(请输入起始周(例1-17)!n); do scanf(%s,&p); if(strlen(q1-week)5) print; while(strlen(q1-week)5); temp=0; do if(!strcmp(q2-week,p)temp=temp+1; printf(查询到%s周的课程信息为:nn,p);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-nex
29、t!=NULL); if(temp=0) printf(未查询到相关课程!n);elseprintf(*n); printf(* 输入0修改课程信息 *n); printf(* 输入1删除课程信息 *n);printf(* 输入2添加课程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(对不起,您没有权限!请联系管理员!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:ad
30、d(m,head);break; break;case 5:mainpage();break;/返回主界面 printf(*n); printf(* 输入0终止查询并返回主界面 *n); printf(* 输入1重新查询 *n);printf(*n);scanf(%d,&j);system(CLS); while(j);if(j=0) mainpage();void alter(int all,int b,lesson *head)/修改课程函赵炳舒lesson *q1,*q2;int k,i,x;q1=q2=head;for(i=2;inext;q2=q1;prin
31、tf(您要修改的课程为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q2);printf(*n);/输出提示信息 printf(* 输入0修改课程编码 *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(*nn); do scan
32、f(%d,&k); if(k8) print; while(k8);switch(k)case 0:printf(您要修改的原编码为%sn,q1-num);/提示修改的内容printf(请输入新编码(1-4位字符串 例:001):n); do scanf(%s,&q1-num); if(strlen(q1-num)4) print; while(strlen(q1-num)4);printf(修改成功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);/输出修改后本结点内所有数据save(all,head);/保存修改break;
33、/跳出case 1:printf(您要修改的原课程名为%sn,q1-proj);printf(请输入新课程名(1-10位字符串 例:math):n);do scanf(%s,&q1-proj); if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);printf(修改成功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);save(all,head);break;case 2:printf(您要修改的原学分为%fn,q1-crdt);printf(请输入新学分:n); do x
34、=0; scanf(%s,&q1-crdt); if(strlen(q1-crdt)4) print; else for(i=0;icrdt)i57|(q1-crdt)icrdt)4|x=1);printf(修改成功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);save(all,head);break;case 3:printf(您要修改的原学时为%dn,q1-hour);printf(请输入新学时(两位整数 例:32):n); do x=0; scanf(%s,&q1-hour); if(strlen(q1-hour)3)
35、 print; else for(i=0;ihour)i57|(q1-hour)ihour)3|x=1);printf(修改成功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);save(all,head);break;case 4: printf(您要修改的原学期为%dn,q1-term);printf(请输入新学期(一位整数 例:2):n); do x=0; scanf(%s,&q1-term); if(strlen(q1-term)2) print; else for(i=0;iterm)i57|(q1-term)iter
36、m)2|x=1);printf(修改成功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);save(all,head);break;case 5:printf(您要修改的原周次为%sn,q1-week);printf(请输入新周次:n);do scanf(%s,&q1-week); if(strlen(q1-week)5) print; while(strlen(q1-week)5); printf(修改成功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);sav
37、e(all,head);break;case 6:printf(您要修改的原日期为%sn,q1-date);printf(请输入新日期:n);do scanf(%s,&q1-date); if(strlen(q1-date)3) print; while(strlen(q1-date)3);printf(修改成功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);save(all,head);break;case 7:printf(您要修改的原节次为%sn,q1-period);printf(请输入新节次:n);do scanf(
38、%s,&q1-period); if(strlen(q1-period)5) print; while(strlen(q1-period)5);printf(修改成功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);save(all,head);break;case 8:printf(您要修改的原教室为%sn,q1-room);printf(请输入新教室:n);do scanf(%s,&q1-room); if(strlen(q1-room)6) print; while(strlen(q1-room)6);printf(修改成
39、功,结果为:n);printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);save(all,head);break;printf(*n);/提示选项信息 printf(* 输入1继续查询课程 *n); printf(* 输入2返回主界面 *n);printf(*nn); do scanf(%d,&k); if(k2) print; while(k2);switch(k)case 1:serch();break;/返回查询函数case 2:mainpage();break;/返回主界面lesson *dele(int all,int b,lesson
40、*head)/删除函静int i,k;lesson *q1,*q2,*q3;q1=q2=q3=head;for(i=2;inext;q2=q1;printf(您要删除的课程是:n);if(b=1)/如果要删除的结点是第一个节点,printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q1);elseq3=q1-next;/如果要删除的结点不是第一个节点进入该分支printf(课程编码 课程名 学分 学时 学期 周次 日期 节次 教室n);output(q3);printf(*n);printf(* 输入0确认删除 *n); prin
41、tf(* 输入1取消删除 *n);printf(*n);do scanf(%d,&k); if(k1) print;/是否确认删除 while(k1);if(!k)/如果确认删除,则进入if(b=1)head=q1-next;/如果要删除第一个节点q1-next=NULL;/令第一个节点的next指针指向NULLall=all-1;/使节点总数减少一个free(q1);/释放第一个节点所占的内存save(all,head);/向save函数提供新的头指针,以便保存新链表else/如果要删除的不是头结点q3=q1-next;/令q3指向要删除的结点q1=q3-next;/令q1指向要删除节点的后
42、一个节点q2-next=q1;/令前一个结点的next指针指向后一个结点q3-next=NULL;/令要删除的结点的next指针指向NULL all=all-1;/令节点总数减少一个free(q3);/释放内存 save(all,head);/保存新链表 return(head);/返回新的头指针void add(int all,lesson *head)/添加函数陈佳兴int i,z,x;lesson *q1,*q2;q1=q2=head;for(i=2;inext;q2=q1;q1=(struct lesson *)malloc(len);/开辟新的内存空间,来存
43、放新数据q2-next=q1;/将新节点连接到原来的最后一个节点上q2=q1;n=0;/使n归零,以便于记录新增的结点数do n=n+1;/记录新增节点数 printf(请输入课程编码(1-4位字符串 例:001)n);/输入数据doscanf(%s,&q1-num);if(strlen(q1-num)4) print;while(strlen(q1-num)4);printf(请输入课程名(1-10位字符串 例:math)n);doscanf(%s,&q1-proj);if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);printf(请
44、输入学分(两位实数,整数部分1位,小数部分1位,例:1.5)n);dox=0;scanf(%s,&q1-crdt);if(strlen(q1-crdt)4) print;elsefor(i=0;icrdt)i57|(q1-crdt)icrdt)4|x=1);printf(请输入学时(两位整数 例:32)n);dox=0;scanf(%s,&q1-hour);if(strlen(q1-hour)3) print;elsefor(i=0;ihour)i57|(q1-hour)ihour)3|x=1);printf(请输入学期(以为整数 例:2)n);dox=0;scanf(%s,&q1-term)
45、;if(strlen(q1-term)2) print;elsefor(i=0;iterm)i57|(q1-term)iterm)2|x=1);printf(请输入周次(例1-17)n);doscanf(%s,&q1-week);if(strlen(q1-week)5) print; while(strlen(q1-week)5); printf(请输入日期(三位周日期 例:mon、sat)n);doscanf(%s,&q1-date);if(strlen(q1-date)3) print; while(strlen(q1-date)3); printf(请输入节次(例:5-6)n);dosc
46、anf(%s,&q1-period);if(strlen(q1-period)5) print; while(strlen(q1-period)5);printf(请输入教室(例:2-201)n);doscanf(%s,&q1-room);if(strlen(q1-room)6) print; while(strlen(q1-room)6); printf(*n); printf(* 输入1继续添加 *n);/输出提示信息 printf(* 输入2保存并退出 *n); printf(*n); do scanf(%d,&z); if(z2) print; while(z2); if(z=1)/如
47、果选择继续添加 q1=(struct lesson *)malloc(len);/开辟新空间 (q2-next)=q1;/指针指向新结点 q2=q1; else/如果选择停止添加,并保存 (q2-next)=NULL;/令尾结点的next指针指向NULL break;/跳出while(1);n=n+all;/得到新链表的节点总数 save(n,head);/传参,保存void output(lesson *q2)/输出函炳舒printf(%8s %6s %4s %4s %4s %4s %4s %4s %4sn,q2-num,q2-proj,q2-crdt,q2-hou
48、r,q2-term,q2-week,q2-date,q2-period,q2-room);int key()/登录函数陈佳兴char str110=a,d,m,i,n,str210;/声明两个字符串,并初始化其中一个 int a,k; printf(*n); printf(* 输入1学生登录 *n); printf(* 输入2管理员登录 *n); printf(*n); do scanf(%d,&a);/输入选项,并记录登录类型 if(a2) print; while(a2);system(CLS); printf(请输入密码:);do scanf(%s,&str2)
49、;/输入密码(即另一个字符串的内容) if(strcmp(str1,str2)=0)/进行两个字符串的对比,利用函数返回值确定两个字符串是否相等,即密码是否正确printf(登录成功!nn);k=0; elseprintf(输入密码错误,请重新输入);k=1;while(k); return(a);/返回登录类型代码,即学生登录或者管理员登录运行结果 首界面 管理员登录界面 学生登录选择增加时界面 添加课程 输入文件保存查看所有输入课程 选择查询方式 输出查询结果 修改课程信息 保存修改信息 删除课程信息课程设计总结以往学习的课程知识虽然也有过一些实践机会,但绝大多数的实践都是一些较小的程序,
50、仅有几十行甚至几行代码即可实现。此次大型系统的设计和实现,让我们用到了所学过的每一点知识,增强了对C语言的应用能力。此外,非常重要的一点是增强了我们的团队合作意识和课外自学能力,由于其中用到的一些知识,仅仅只接触过理论知识而并没有经历过实践,为了能够完成该项课程设计,团队成员通过上网或图书馆查资料去学习并掌握一些本来不是特别熟练的一些算法和数据结构的相关知识。在课程设计过程中,曾经出现过很多的问题。成员通过各种途径获得知识,老师也给与了我们很大的帮助,为我们找出了很多问题也解决了很多的问题,对此小组非常感激。其中,老师特意提起的我们程序的模块化的严重不足,导致语句有效率低,程序冗长,不容易读懂
51、维护和修改。我们也深刻体会了模块化不足所造成的不便,使我们认识到了自己的不足,在今后的学习实践中,我们会逐渐学着去完善自己的程序,使自己的程序更加精炼,更加易用。通过此次课程设计实践和设计过程中的学习,我们也看到了C语言的功能的强大。这是我们学习的第一门计算机程序语言课程,也是我们将来学习的基础,我们应该掌握C语言的基本用法,深入研究更多的程序,多多实践,以提高自己的实践应用能力。附录资料:不需要的可以自行删除 C语言-INT10中断号视频服务程序00H(设置视频模式)输入: AH=00H AL=视频模式输出: 无 说明:视频服务程序00H用来设置视频配置为表10-l中列出之一。AL寄存器给定
52、所需视频模式。若设置了新视频模式,则清除屏幕。 视频服务程序0lH(设置光标大小)输入: AH=01H CH=光标开始扫描行 CL=光标结束扫描行输出: 无说明:该服务程序用于正文模式。在一个字符单元内由一行或几行组成的光标将在字符显示位置得闪烁。该服务程序定义光标的显示行数。对CGA模式,8扫描行(07)用于光标。对EGA模式,使用14行(013)。MCGA和VGA适配器,光标可具有16扫描行(015)高。缺省设置如下: CGA: CH6,CL7 EGA: CHll,CL12 MCGA和VGA: CH量13,CL1 视频服务程序02H(设置光标位置)输入: AH=02H BH=光标页号 DH
53、=光标行号 DL=光标列号输出: 无说明:该服务器序用于将光标移到指定行和列位置。该服务程序即可用于正文模式也可用于图形模式;然而,仅在正文模式下才显示光标。屏幕左上角为坐标系统的原点。对支持多页的正文和图形模式,则必须指定页号,以保证光标位置正确。视频服务程序03H(读光标位置)输入: AH=03H BH=页号输出: CH=光标开始行 CL=光标结束行 DH=行号 DL列号说明:该服务程序用于获取光标大小和位置。BH给定了页号。CH中存放光标开始扫描行,而CL中为光标结束扫描行。DH中存放行位置,DL中为列位置。视频服务程序05H(设置活动显示页)输入: AH=05H AL=活动页号输出:
54、无 说明:该服务程序为正文和图形模式用来设置活动显示页号。AL指定所需页号。对多数正文模式,页号范围为0一7。对具有足够视频缓冲EGA和VGA适配器,可支持多页图形。对所有正文和图形模式,缺省为0页。视频服务程序06H(向上翻滚活动窗口)。输入:AH=06HAL=翻滚行数BH=空白行属性CH左上角行号CL=左上角列号 DH右下角行号 Dl右下角列号输出: 无 说明:该服务程序用来创建和翻滚一正文窗口。CH和CL中给出了正文窗口左上角坐标,DH和DL中给出了正文窗口右下角坐标。AL中定义了翻滚的行数。若AL00H,则正文窗口为空白。当滚动窗口时,底部行是空白行,其属性由BH中指定。视频服务程序0
55、7H(向下翻滚窗口)输入:AH=07HAL=翻滚行数BH=空白行属性CH=左上角行号CL=左上角列号DH=右下角行号DL=右下角列号输出: 无说明:该服务程序用来创建和翻滚一正文窗口。CH和CL中给出了正文窗口左上角坐标,DH和DL中给出了正文窗口右下角坐标。AL中定义了翻滚的行数。若AL00H,则正文窗口为空白。当滚动窗口时,顶部行为空白,其属性由BH中指定。视频服务程序08H(读字符和属性)输入: AH=08H BH=活动页号输出: AH=字符属性 AL=字符码说明:该服务程序用于读取正文或视频模式下,光标所在处字符。在图形模式下,获取的字符同图形模式下使用的字符生成表有关。在正文模式下,
56、将获得字符的ASCII码。字符属性存放在AH中,字符ASCII码存放在AL中。图形模式下,AH中内容无意义.视频服务程序09H(写字符和属性)输入: AH09H AL=写字符的ASCII码 BL=写字符的属性 BH=活动页号 CX=重复写字符和属性次数输出: 无 说明:该服务程序写一个字符到屏幕当前光标处。AL中指定字符码。正文模式下,BL中指定字符属性。图形模式下,BL指定背景颜色。字符可重复写。CX为写字符及属性的次数。视频服务程序0FH(取当前视频模式)输入: AH0FH输出: AH每行字符数 AL当前显示模式 BH活动页号说明:该服务程序用来获取当前视频模式,屏幕宽(以字符计),以及活
57、动显示页号;视频显示模式存放在AL中。屏幕宽度(以字符计)存放在AH中,活动页号存放在BH中。文件相关函数函数名: fopen功 能: 打开一个流用 法: FILE *fopen(char *filename, char *type);函数名: fclose功 能: 关闭一个流用 法: int fclose(FILE *stream); fopen()函数提供了几种打开文件的方式,这是由其字符指针参数type决定的。以下给出打开方式列表:参数作用R只读W新建、可写,如果文件存在则覆盖A存在则在文件后附加,如果不存在则新建后写r+更新一个存在的文件(读和写)w+增加一个新的文件更新(读和写),如
58、果文件存在则覆盖a+存在则在文件后附加(读和写),如果不存在则新建后更新(读和写)*以文本模式打开一个存在或新建的文件,附加”t”在参数后(rt, w+t, etc.)。*以二进制模式打开一个存在或者新建的文件,附加”b”在参数后(wb, a+b, etc.)。函数名: fseek功 能: 重定位流上的文件指针用 法: int fseek(FILE *stream,long offset,int fromwhere); 读取文件函数:函数名: fread功 能: 从一个流中读数据用 法: int fread( void *ptr, int size, int nitems, FILE *str
59、eam ); 写入文件函数:函数名: fwrite功 能: 写内容到流中用 法: int fwrite( void *ptr, int size, int nitems, FILE *stream ); fseek()函数提供了文件指针的三个初始位置,这是由其参数fromwhere决定的,以下给出其列表:常量值文件定位SEEK_SET0从文件头开始寻找SEEK_CUR1从文件当前位置开始寻找SEEK_END2从文件最后开始寻找函数名: fprintf功 能: 传送格式化输出到一个流中用 法: int fprintf( FILE *stream, char *format, argument,.
60、 );函数名: fscanf功 能: 从一个流中执行格式化输入用 法: int fscanf( FILE *stream, char *format,argument. );发声函数函数名: sound功 能: 以指定频率打开PC扬声器用 法: void sound(unsigned frequency);函数名: nosound功 能: 关闭PC扬声器用 法: void nosound(void);常规内存操作函数申请函数:malloc(),farmalloc(),calloc(),farcalloc(),realloc(),farealloc()函数名: malloc功 能: 内存分配函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 记忆花开作文800字(8篇)
- 2025年维生素E项目申请报告
- 法律行业合同法条文解读与案例分析
- 2025年美容师(高级)职业技能鉴定实操试卷-美容师实操技能考核结果分析篇
- 回忆与感慨演讲稿13篇
- 2025年物业管理师考试物业管理师考试物业管理企业组织结构与运营优化试题
- 初中远足探险之旅勇敢迈步迎接未来作文(14篇)
- 农村地区绿色农业种植协议
- 职业技能培训在2025年乡村振兴中的区域差异分析报告
- 通信设备维修维护服务协议
- 核磁共振(NMR)讲课
- 4公民的基本权利和义务 第一课时《公民的基本权利》教学设计-2024-2025学年六年级上册道德与法治统编版
- 2023年中国建设银行西藏自治区分行招聘考试真题及答案
- 行政法学笔记
- 尺规作图的教学分析
- 走进黄帝内经文化殿堂智慧树知到答案2024年上海中医药大学
- 云南省昆明市云南师大附中2023级高一年级教学测评月考卷(六)地理
- QCT1164-2022汽车用天然气滤清器
- 民众生活中的民俗学智慧树知到期末考试答案章节答案2024年湖南师范大学
- Y -S-T 436-2023 铝合金建筑型材图样图册 (正式版)
- 鲁科版高中化学选择性必修第三册知识点复习资料
评论
0/150
提交评论