for(p=head;p;p=p->next) if(p->num==num) {
total=total+p->score; a[i]=num; i++; }
scanf(\ }
if(total<60) {
printf(\选修总学分为%d,未达到60,选修失败!\\n\ system(\ } else {
FILE *fp;
fp=fopen(\ for(j=0;j
for(q=head;q;q=q->next) if(q->num==a[j])
fprintf(fp,\
q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); fclose(fp);
printf(\选修成功!****\\n\
printf(\您选修的课程总学分为%d,课程分别为:\\n\ printf(\课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\\n\ for(j=0;j
for(q=head;q;q=q->next) if(q->num==a[j])
printf(\
q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); printf(\以上信息全部保存在'3.txt'中\\n\ }
system(\}
void search() //课程信息查询 {
int a,num; int t=1;
char type[10];
21
SUB *ptr;
L1:system(\
printf(\请选择查询方式*************\\n\ printf(\按课程性质查找\\n\ printf(\按学分查找\\n\ printf(\退出查找\\n\
printf(\ printf(\ scanf(\ switch(a) {
case 1:printf(\请输入要查找的课程的性质:\ scanf(\
printf(\课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\\n\
for(ptr=head;ptr;ptr=ptr->next) if(strcmp(type,ptr->kind)==0) {
printf(\
ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);
t=0; }
if(t)
printf(\未找到!\\n\ t=1;
system(\ goto L1;
case 2:printf(\输入要查找的课程的学分:\ scanf(\
printf(\课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\\n\
for(ptr=head;ptr;ptr=ptr->next) if(ptr->score==num) {
printf(\
ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); t=0; }
if(t)
printf(\未找到!\\n\
22
t=1;
system(\ goto L1; case 3:break; } }
void Mangers() {
int n,w=1,flag=0,i=3; char s[8];
char password[7]=\ do {
printf(\ scanf(\
if(!strcmp(s,password)) // {
flag=1; break; } else {
printf(\You only again:\\n\ i--; } }
while(i>0); if(!flag) {
printf(\ exit(0); // } do {
system(\
puts(\*******************\\n\\n\
puts(\录入课程\\n\ puts(\浏览课程\\n\ puts(\查询课程\\n\ puts(\删除课程\\n\ puts(\返回主菜单\
23
进行密码匹配验证 have %d times! Enter 输入密码超过了3次!!自动退出 管理员菜单
puts(\);
printf(\ scanf(\ switch(n) {
case 1:insert();savefile();break; case 2:prin();break; case 3:search();break;
case 4:del();savefile();break; case 5:return; default:; } }
while(w==1); }
void Students() {
int n,w=1; do {
system(\
puts(\学生菜单*******************\\n\\n\
puts(\浏览所有课程\\n\ puts(\查询课程信息\\n\ puts(\选择选修课程\\n\ puts(\浏览我选修的课程\\n\ puts(\删除错选课程\\n\ puts(\返回主菜单\
puts(\ printf(\ scanf(\ switch(n) {
case 1:prin();break; case 2:search();break; case 3:choose();break; case 4:prin1();break;
case 5:del();savefile1();break; case 6:return; default:; }
24
}
while(w==1); }
int main() {
int n,w=1; do {
system(\
puts(\ puts(\以管理员身份登录(password 1)\\n\ puts(\以学生身份登录\\n\ puts(\退出\
puts(\ printf(\ scanf(\ switch(n) {
case 1:Mangers() ;break; case 2:Students();break; case 3:w=0;break; default:; } }
while(w==1); return 0; }
四、排序重构问题
4.1问题说明
A为一个由N个已特殊排序数组成的数列:A1,A2,…,AN,其中A1=0。令B为N(N-1)/2个数(定义为Dij=Ai-Aj(i>j))组成的数列。例如,A=0,1,5,8,那么D=1,3,4,5,7,8。请完成:
编写程序,根据A构造D;
编写程序,构造与D相对应的某一个数列A,注意A不是唯一的。
25