数据结构选课系统设计 数据结构课设选题
C语言课程设计《学生选课系统》的设计与实现
/ Note:Your cho is C IDE /
数据结构选课系统设计 数据结构课设选题
数据结构选课系统设计 数据结构课设选题
数据结构选课系统设计 数据结构课设选题
#include
#include
#include
#include
#define N 100
struct student
{char num[10];
char name[10];
char [11];
};
/ 以下是函数原型说明,被调函数的定义在主调函数后面时,要加此部分 /
void myprint();
void mycreate();
void mydisplay();
void mysearch();
/ sch_num与sch_name函数被mysearch调用 /
void sch_num(FILE fp);
void sch_name(FILE fp);
void mymodify();
void myadd();
void mydelete();
/ del_num与del_name函数被mydelete调用 /
void del_num(FILE fp);
void del_name(FILE fp);
void mysort();
/ sort_num与sort_name函数被mysort调用 /
void sort_num();
void sort_name();
void main()
{char choose,yes_no;
do
{myprint(); / 显示主菜单 /
printf(" ");
choose=getch();
switch(choose)
{case '1': mycreate(); break; / 创建 /
case '2': mydisplay(); break; / 显示 /
case '3': mysearch(); break; / 查询 /
case '4': mymodify(); break; / 修改 /
case '5': myadd(); break; / 添加 /
case '6': mydelete(); break; / 删除 /
case '7': mysort(); break; / 排序 /
case '0': break;
default:printf("n %c为非法选项!n",choose);
}if(choose=='0')
break;
printf("n 要继续选择吗(Y/N)?n");
do
{yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no!='Y'||yes_no!='y');
}void myprint() / 显示菜单界面 /
{printf("nnnnnnnn");
printf(" |----------------------------|n");
printf(" | 请输入选项编号(0-7): |n");
printf(" |----------------------------|n");
printf(" | 1--创建信息管理系统 |n");
printf(" | 2--显示信息管理系统 |n");
printf(" | 3--查询信息管理系统 |n");
printf(" | 4--修改信息管理系统 |n");
printf(" | 5--添加信息管理系统 |n");
printf(" | 6--删除信息管理系统 |n");
printf(" | 7--排序信息管理系统 |n");
printf(" | 0--退出 |n");
printf(" |----------------------------|n");
}/ 定义创建信息管理系统的函数 /
void mycreate()
{int i=1;
struct student temp;
FILE fp;
fp=fopen("d:lbhguanli.dat","w");
if(fp==NULL)
{printf("n 打开文件失败!n");
return;
}printf("n 请输入第1个记录:n");
printf(" 学号(用#结束输入):");
do
{gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.);
while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.[0]!='#')
{fprintf(fp,"%23s%15s%15sn",temp.num,temp.name,temp.);
i++;
printf("n 请输入第%d个记录:n",i);
printf(" 学号(用#结束输入):");
do
{gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.);
}fclose(fp);
}/ 定义显示信息管理系统的函数 /
void mydisplay()
{int n=0;
struct student temp;
FILE fp;
fp=fopen("d:lbhguanli.dat","r+");
if(fp==NULL)
{printf("n 打开文件失败!n");
return;
}// clrscr();
printf(" 学号 姓名 电话号码n");
while(feof(fp)==0)
{fscanf(fp,"%23s%15s%15sn",&temp.num,&temp.name,&temp.);
printf("%23s%15s%15sn",temp.num,temp.name,temp.);
n++;
}if(n==0)
printf("n 文件中无记录!n");
else
printf("n 文件有%d个记录!n",n);
fclose(fp);
}/ 定义查询信息管理系统的函数 /
void mysearch()
{char c;
FILE fp;
fp=fopen("d:lbhguanli.dat","r+");
if(fp==NULL)
{printf("n 打开文件失败!n");
return;
}printf("n 按学号查询(h),还是按姓名查询(m)?");
c=getch();
if(c=='h'||c=='H')
sch_num(fp); / 按学号查询 /
if(c=='m'||c=='M')
sch_name(fp); / 按姓名查询 /
else
printf("n 非法字符!n");
fclose(fp);
}/ 定义按学号查询信息管理系统的函数 /
void sch_num(FILE fp)
{int flag=0,n=0;
char tempnum[10];
struct student temp;
printf("n 请输入要查询记录的学号:");
gets(tempnum);
while(feof(fp)==0)
{fscanf(fp,"%23s%15s%15sn",&temp.num,&temp.name,&temp.);
if(strcmp(tempnum,temp.num)==0)
{if(flag==0)
printf(" 学号 姓名 电话号码n");
printf("%23s%15s%15sn",temp.num,temp.name,temp.);
flag=1;
}n++;
}if(n==0)
printf("n 文件中无记录!n");
else
if(flag==0)
printf("n 文件中无此人!n");
}/ 定义按姓名查询信息管理系统的函数 /
void sch_name(FILE fp)
{int flag=0,n=0;
char tempname[10];
struct student temp;
printf("n 请输入要查询记录的姓名:");
gets(tempname);
while(feof(fp)==0)
{fscanf(fp,"%23s%15s%15sn",&temp.num,&temp.name,&temp.);
if(strcmp(tempname,temp.name)==0)
{if(flag==0)
printf(" 学号 姓名 电话号码n");
printf("%23s%15s%15sn",temp.num,temp.name,temp.);
flag=1;
}n++;
}if(n==0)
printf("n 文件中无记录!n");
else
if(flag==0)
printf("n 文件中无此人!n");
}/ 定义修改信息管理系统的函数 /
void mymodify()
{char c;
int n=0;
struct student find,temp,record[100],p; / 最多100个记录 /
FILE fp;
fp=fopen("d:lbhguanli.dat","r+");
if(fp==NULL)
{printf("n 打开文件失败!n");
return;
}p=record;
while(feof(fp)==0)
{fscanf(fp,"%23s%15s%15sn",p->num,p->name,p->);
p++;
n++;
}fclose(fp);
if(n==0)
{printf("n 文件中无记录!n");
return;
}printf("n 请输入要修改记录的学号:");
gets(temp.num);
for(p=record;p if(strcmp(temp.num,p->num)==0) {find=p; / find记住修改记录的位置 / break; }if(p==record+n) {printf("n 无此人!n"); return; }do {printf("n 请输入正确的学号:"); do {gets(temp.num); }while(strcmp(temp.num,"")==0); printf(" 请输入正确的姓名:"); gets(temp.name); printf(" 请输入正确的电话号码:"); gets(temp.); for(p=record;p if((strcmp(temp.num,p->num)==0)&&(p!=find)) {printf("n 学号重复,要重新输入吗(Y/N)?"); do {c=getch(); }while(c!='Y'&&c!='y'&&c!='N'&&c!='n'); putchar('n'); break; }if(p==record+n) {find=temp; / find指向需要修改记录的位置 / break; }}while(c=='Y'||c=='y'); fp=fopen("d:lbhguanli.dat","r+"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }for(p=record;p fprintf(fp,"%23s%15s%15sn",p->num,p->name,p->); fclose(fp); }/ 定义添加信息管理系统的函数 / void myadd() {char c; int n=0; struct student temp,record[N],p; FILE fp; fp=fopen("d:lbhguanli.dat","r+"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }p=record; while(feof(fp)==0) {fscanf(fp,"%23s%15s%15sn",p->num,p->name,p->); p++; n++; }fclose(fp); do {printf("n 请输入新记录的学号:"); do {gets(temp.num); }while(strcmp(temp.num,"")==0); printf(" 请输入新记录的姓名:"); gets(temp.name); printf(" 请输入新记录的电话号码:"); gets(temp.); for(p=record;p if(strcmp(temp.num,p->num)==0) {printf("n 学号重复,要重新输入吗(Y/N)?"); do {c=getch(); }while(c!='Y'&&c!='y'&&c!='N'&&c!='n'); putchar('n'); break; }if(p==record+n) {p=temp; break; }}while(c=='Y'||c=='y'); fp=fopen("d:lbhguanli.dat","r+"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }for(p=record;p fprintf(fp,"%23s%15s%15sn",p->num,p->name,p->); fclose(fp); }/ 定义删除信息管理系统的函数 / void mydelete() {char c; FILE fp; fp=fopen("d:lbhguanli.dat","r+"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }printf("n 按学号删除(h),还是按姓名删除(m)?"); c=getch(); if(c=='h'||c=='H') del_num(fp); / 按学号删除 / if(c=='m'||c=='M') del_name(fp); / 按姓名删 / else printf("n 非法字符!n"); fclose(fp); }/ 定义按学号删除信息管理系统的函数 / void del_num(FILE fp) {int n=0; char tempnum[10]; struct student record[N],p,k; p=record; while(feof(fp)==0) {fscanf(fp,"%23s%15s%15sn",p->num,p->name,p->); p++; n++; }fclose(fp); printf("n 请输入要删除记录的学号:"); gets(tempnum); for(k=record;k if(strcmp(tempnum,k->num)==0) break; / 找到要删记录结束循环 / if(k for(p=k;p p=(p+1); else printf("n 无此人!n"); fp=fopen("d:lbhguanli.dat","w"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }for(p=record;p fprintf(fp,"%23s%15s%15sn",p->num,p->name,p->); }/ 定义按姓名删除信息管理系统的函数 / void del_name(FILE fp) {int n=0; char tempname[10]; struct student record[N],p,k; p=record; while(feof(fp)==0) {fscanf(fp,"%23s%15s%15sn",p->num,p->name,p->); p++; n++; }fclose(fp); printf("n 请输入要删除记录的姓名:"); gets(tempname); for(k=record;k if(strcmp(tempname,k->name)==0) break; / 找到要删记录结束循环 / if(k for(p=k;p p=(p+1); else printf("n 无此人!n"); fp=fopen("d:lbhguanli.dat","w"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }for(p=record;p fprintf(fp,"%23s%15s%15sn",p->num,p->name,p->); }/ 定义排序信息管理系统的函数 / void mysort() {char c; FILE fp; fp=fopen("d:lbhguanli.dat","r+"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }fclose(fp); printf("n 按学号排序(h),还是按姓名排序(m)?"); c=getch(); if(c=='h'||c=='H') sort_num(); / 按学号排序 / if(c=='m'||c=='M') sort_name(); / 按姓名排序 / else printf("n 非法字符!n"); }/ 定义按学号排序信息管理系统的函数 / void sort_num() {int i,j,k,n=0; char c; struct student record[N],p,temp; FILE fp; fp=fopen("d:lbhguanli.dat","r"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }p=record; while(feof(fp)==0) {fscanf(fp,"%23s%15s%15sn",p->num,p->name,p->); p++; n++; }fclose(fp); printf("n 按升序(s),还是按降序(j)?"); c=getch(); if(c=='s'||c=='S') / 按学号的升序排列 / for(i=0;i {k=i; for(j=i+1;j if(strcmp((p+k)->num,(p+j)->num)>0) k=j; temp=(p+k); (p+k)=(p+i); (p+i)=temp; }else if(c=='j'||c=='J') / 按学号的降序排列 / for(i=0;i {k=i; for(j=i+1;j if(strcmp((p+k)->num,(p+j)->num)<0) k=j; temp=(p+k); (p+k)=(p+i); (p+i)=temp; }else {printf("n 非法字符!n"); return; }fp=fopen("d:lbhguanli.dat","w"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }for(p=record;p {fprintf(fp,"%23s%15s%15sn",p->num,p->name,p->); printf("%23s%15s%15sn",p->num,p->name,p->); }fclose(fp); }/ 定义按姓名排序信息管理系统的函数 / void sort_name() {int i,j,k,n=0; char c; struct student record[N],p,temp; FILE fp; fp=fopen("d:lbhguanli.dat","r+"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }p=record; while(feof(fp)==0) {fscanf(fp,"%23s%15s%15sn",p->num,p->name,p->); p++; n++; }fclose(fp); printf("n 按升序(s),还是按降序(j)?"); c=getch(); if(c=='s'||c=='S') / 按姓名的升序排列 / for(i=0;i {k=i; for(j=i+1;j if(strcmp((p+k)->name,(p+j)->name)>0) k=j; temp=(p+k); (p+k)=(p+i); (p+i)=temp; }else if(c=='j'||c=='J') / 按姓名的降序排列 / for(i=0;i {k=i; for(j=i+1;j if(strcmp((p+k)->name,(p+j)->name)<0) k=j; temp=(p+k); (p+k)=(p+i); (p+i)=temp; }else {printf("n 非法字符!n"); return; }fp=fopen("d:lbhguanli.dat","w"); if(fp==NULL) {printf("n 打开文件失败!n"); return; }for(p=record;p fprintf(fp,"%23s%15s%15sn",p->num,p->name,p->); fclose(fp); } #include #include #include struct BOOK {int id,usr[10],total,store,days[10]; char name[30],author[20]; }books[100]; /结构体,存放书籍及借书信息。/ void page_title(char menu_) {printf(">>> 以下是图 书 管 理 系 统--请 按 要 求 作 << }/页头函数,可以通过参数menu_,显示当前状态。/ void return_confirm(void) {printf("n任意键返回……n"); getch(); }/返回前请求确认函数,方便返回前观察结果/ int search_book(void) {int n,i; printf("请输入图书序号:"); scanf("%d",&i); for(n=0;n<100;n++) {if(books[n].id==i) {printf("书名:%sn",books[n].name); printf("作者:%sn",books[n].author); printf("存数:%dn",books[n].store); printf("总数:%dn",books[n].total); return n; }} printf("n输入有错或图书序号不存在.n"); return -1; }/上面是在数组中找到图书号匹配的记录,显示其信息并返 回数组下标,如果找不到相应记录则提示错误并返回-1。/ void book_out(void) {int n,s,l,d; page_title("借书"); if((n=search_book())!=-1&&books[n].store>0) {printf("请输入借书证序号:"); scanf("%d",&s); printf("请输入可借天数:"); scanf("%d",&d); for(l=0;l<10;l++) {if(books[n].usr[l]==0) {books[n].usr[l]=s; books[n].days[l]=d; break; }} books[n].store--; }if(n!=-1&&books[n].store==0) printf("此书已经全部借出.n"); return_confirm(); }/借书的函数,首先调用找书函数/ void book_in(void) {int n,s,l; page_title("还书"); if((n=search_book())!=-1&&books[n].store {printf("借阅者图书证列表:n"); for(l=0;l<10;l++) if (books[n].usr[l]!=0) printf("[%d] - %d天n",books[n].usr[l],books[n].days[l]); printf("请输入借书证序号:"); scanf("%d",&s); for(l=0;l<10;l++) {if(books[n].usr[l]==s) {books[n].usr[l]=0; books[n].days[l]=0; break; }} books[n].store++; }if(n!=-1&&books[n].store==books[n].total) printf("全部入藏.n"); return_confirm(); }void book_add(void) {int n; page_title("注册书"); for(n=0;n<100;n++) if(books[n].id==0) break; printf("序号:"); scanf("%d",&books[n].id); printf("书名:"); scanf("%s",&books[n].name); printf("作者:"); scanf("%s",&books[n].author); printf("数量:"); scanf("%d",&books[n].total); books[n].store=books[n].total; return_confirm(); }void book_del(void) {int n; page_title("注销书"); if((n=search_book())!=-1) books[n].id=0; printf("该书已注销.n"); return_confirm(); }void main(void) {menu: page_title("作选择单子"); printf("请按以上要求选择作nn"); printf("1 借书n2 还书nn"); printf("3 注册书n4 注销书nn"); printf("n0 退出n"); switch(getch()) {case '1' : book_out();break; case '2' : book_in();break; case '3' : book_add();break; case '4' : book_del();break; case '0' : exit(0); }goto menu; } 可以凭借Baiduhi你的题目 有空能解决你无法解决的题目 如果你有一样的要求也能 ES:6279087668580D62BBEF1F383816235A 交易提醒:预付定金有风险 交易提醒:勿轻信百度名中的 这个是程序: #include "string.h" #define NULL 0 unsigned int key; unsigned int key2; int p; struct node {char name[20],address[20]; char num[11]; struct node next; }phone; nam; address; typedef struct node pnode; typedef struct node mingzi; void hash(char num[11]) {int i = 3; key=(int)num[2]; while(num[i]!=NULL) {key+=(int)num[i]; i++; key=key%17; }void hash2(char name[8]) {int i = 1; key2=(int)name[0]; while(name[i]!=NULL) {key2+=(int)name[i]; i++; }Key2=key2%17; }struct node input() {struct node temp=(struct node)malloc(sizeof(struct node)); temp = new node; temp->next=NULL; printf("qing shu xing ming(no more then 8 chars) :n"); scanf("%s",&temp->name); printf"qing shu dian hua hao ma(no more then 11 numbers):n"); scanf("%s",&temp->num); printf("qing shu di zhi(no more then 20 chars):n"); scanf("%s",&temp->address); return temp; }int add() {struct node newphone; struct node newname; newphone=input(); printf("ni de ji lu shi"); if(find(newphone->num)) {printf("hao ma yi jing cun zai bu nene zai tian jia.n"); return 0; }if(find2(newphone->name)) {printf("xing ming yi jing cun zai bu neng zai tian jia.n"); return 0; }printf("%s_%s_%sn",newphone->name,newphone->address,newphone->num); newname=newphone; newphone->next=NULL; newname->next=NULL; hash(newphone->num); hash2(newname->name); newphone->next = phone[key]->next; phone[key]->next=newphone; newname->next = nam[key2]->next; nam[key2]->next=newname; return 0; }int find(char num[11]) {int isfind=0; struct node q; hash(num); node q=phone[key]->next; while(q!= NULL) {if(strcmp(num,q->num) ==0) {isfind=1; break; }q=q->next; }if(isfind) printf("%s_%s_%sn",q->name,q->address,q->num); return isfind; }int find2(char name[8]) {int isfind=0; hash2(name); struct node q=nam[key2]->next; while(q!= NULL) {if(strcmp(name,q->name)==0) {isfind=1; break; }q=q->next; }if(isfind) printf("%s_%s_%sn",q->name,q->address,q->num); return isfind; }void create() {int i; phone = (pnode)malloc(13sizeof(pnode)); for(i=0;i<13;i++) {phone[i]=(struct node)malloc(sizeof(struct node)); phone[i]->next=NULL; }} void create2() {int i; nam = (mingzi)malloc(13sizeof(mingzi)); for(i=0;i<13;i++) {nam[i]=(struct node)malloc(sizeof(struct node)); nam[i]->next=NULL; }} void list() {int i; struct node p; for(i=0;i<13;i++) {p=phone[i]->next; while(p) {printf("%s_%s_%sn",p->name,p->address,p->num); p=p->next; }} }void list2() {int i; struct node p; for(i=0;i<13;i++) {p=nam[i]->next; while(p!=NULL) {printf("%s_%s_%sn",p->name,p->address,p->num); p=p->next; }} }void menu() {printf("0.tian jia ji lv.n"); printf("2.cha zhao ji lu.n"); printf("3.xing ming lie biao.n"); printf("4.hao ma lie biao.n"); printf("5.qing chu suo you ji lu.n"); printf("6.tui chu xi tong.n"); }int main() {char num[11]; char name[8]; int sel; create(); create2(); while(1) {menu(); scanf("%d",&sel); if(sel==3) {char b; printf("Input 9 to search with number,8 to name.n"); b=getch(); if(b=='9') {printf("Please input the number:n"); scanf("%s",&num); if(!find(num)) printf("Record not exist.n"); }else if(b=='8') {printf("Please input the name:n"); scanf("%s",&name); if(!find(name)) printf("Record not exist.n"); }else {printf("Wrong input!Please input again!n"); continue; }} else if(sel==2) {printf("All record with name:n"); list2(); }else if(sel==0) {printf("Please input the rmation:n"); add(); }else if(sel==4) {printf("All record with number:n"); list(); }else if(sel==5) {create(); create2(); printf("All records he been removed.n"); }else if(sel==6) {printf("7"); break; }} return 0; } 虚拟运行,比较难,问题快过期了加分吧朋友! //--------------------------------------------------------------------------- #include #include #define DATASTYLE "%d "/结点数据成员的数据类型对应的格式控制符/ typedef int datatype; /结点数据成员的数据类型/ typedef struct node{ /树结点的数据结构/ datatype data; struct node left,right; }node; node insert(node a,datatype d) /将d插入到a指向的树中,返回插入元素后的树/ {node t=NULL; if (a==NULL) {/如果当前树为空,就创建一个新结点/ t=malloc(sizeof(node)); t->data=d; t->left=t->right=NULL; }else if (d>a->data) {/如果树不空,并且d大于当前结点,则将d插入到当前结点的右子树/ a->right=insert(a->right,d); t=a; }else if (d<=a->data) {/如果树不空,并且d小于当前结点,则将d插入到当前结点的左子树/ a->left=insert(a->left,d); t=a; }return t; }void prttree(node r) /中序遍历输出排序二叉树/ {if (r) {prttree(r->left); printf(DATASTYLE,r->data); prttree(r->right); }} void Free(node r) /利用后序遍历算法删除二叉树/ {if (r) {Free(r->left); Free(r->right); free(r); }} int main(int argc, char argv[]) {datatype a[10]={1,9,2,8,3,7,4,6,5,0}; int i; node root=NULL; for (i =0; i< 10; i++) /将a数组中的10个整数插入到root二叉树中/ {printf(DATASTYLE,a[i]); root=insert(root,a[i]); }putchar('n'); prttree(root); Free(root); return 0; }//--------------------------------------------------------------------------- 这个自己看下 不过是用C实现的 #include #include #include #define MAXSIZE 1000 typedef char datatype; typedef struct {datatype a[MAXSIZE]; int size; }e_list; e_list s; e_list t; void ptint_slt(e_list slt); /输出文本/ void letter_number(e_list slt); /全部字母个数/ void space_number(e_list slt); /全部空格个数/ void digit_number(e_list slt); /全部数字总数/ void size_number(e_list slt); /文章总字数/ void dele_print(e_list p,e_list slt); /输出删除某一字符串后的文章/ void ptint_slt(e_list slt) /输出文本/ {int i,j=0; if(!slt.size) {printf("n错误!");exit(1);} else for(i=0;i {printf("%c",slt.a[i]); j++; if(j%20==0) printf("n"); }} void letter_number(e_list slt) /全部字母个数/ {int i,j=0; if(!slt.size) {printf("n错误!");exit(1);} else for(i=0;i {if((slt.a[i]>='a'&&slt.a[i]<='z')||(slt.a[i]>='A'&&slt.a[i]<='Z')) j++; }printf("%d",j); }void space_number(e_list slt) /全部空格个数/ {int i,j=0; if(!slt.size) {printf("n错误!");exit(1);} else for(i=0;i {if(slt.a[i]==' ') j++; }printf("%d",j); }void digit_number(e_list slt) /全部数字总数/ {int i,j=0; if(!slt.size) {printf("n错误!");exit(1);} else for(i=0;i {if(slt.a[i]>='0'&&slt.a[i]<='9') j++; }printf("%d",j); }void size_number(e_list slt) /文章总字数/ {printf("%d",slt.size); }void dele_print(e_list p,e_list slt) /输出删除某一字符串后的文章/ {int i,j,succ; i=0;succ=0; /用i扫描正文t,succ为匹配成功标志/ while((i<=slt.size-p.size+1)&&(!succ)) {j=0;succ=1; /用j扫描模式p/ while((j<=p.size-1)&&succ) if(p.a[j]==slt.a[i+j]) j++; else succ=0; i++; }if(succ) {for(j=0;j<(slt.size-p.size-1);j++) {slt.a[i-1]=slt.a[i+p.size-1]; i++; }slt.size=slt.size-p.size; for(i=0;i {printf("%c",slt.a[i]); }printf("n"); }else printf("n错误!没有与字符串相配的子串!"); }void main() {int i; int right; s.size=0; for(i=0;i {s.a[i]=getchar(); s.size++; if(s.a[i]=='n') {s.size--; break;} }printf("n文本录入完毕!输出的文本为..n"); ptint_slt(s); printf("n全部字母个数为:"); letter_number(s); printf("n全部空格个数为:"); space_number(s); printf("n全部数字个数为:"); digit_number(s); printf("n文章总字数为:"); size_number(s); printf("n要删除的字符串为:"); for(i=0;i {t.a[i]=getchar(); t.size++; if(t.a[i]=='n') {t.size--; break;} }printf("n删除字符串后的结果为:"); dele_print(t,s); } //7《学生选修课程系统》设计任务 //(1)输入功能:输入30名学生学号、班级、姓名、选修课名称。 //(2)设置要求:每个学生至少选修3科,总选修科目至少设置15科。 //(3)查询功能:按学号、姓名、选修课显示各选修课上课时间和地点。 #include #include #include #include typedef struct subjects {int num; char na[10]; char teacher[20]; char wtime[10]; char ttime[10]; int score; struct subjects next; }SUB; SUB create_form() {SUB head,tail,p; int num,score; char na[10],teacher[20],wtime[10],ttime[10]; head=tail=NULL; printf(" 输入选课程信息,以6个0结束:n"); printf(" 课程代码 课名 任教老师 上课星期 上课时间 学分n"); scanf("%d%10s%14s%10s%8s%6d",&num,&na,&teacher,&wtime,&ttime,&score); while(num!=0) {p=(SUB)malloc(sizeof(SUB)); p->num; strcpy(p->na,na); strcpy(p->teacher,teacher); strcpy(p->wtime,wtime); strcpy(p->ttime,ttime); p->score=score; if(head==NULL) head=p; else tail->next=p; tail=p; scanf("%d%s%s%s%s%d",&num,&na,&teacher,&wtime,&ttime,&score); }tail->next=NULL; return head; }void sefile(SUBhead) {SUB p; FILE fp; fp=fopen("subjects.txt","w"); fprintf(fp,"欢迎进入东华理工大学2008-200年选修课系统(4-13)n"); fprintf(fp,"课程代码 课名 任教老师 上课星期 上课时间 学分n"); for(p=head;p;p->next) fprintf(fp,"%6d%10s%14s%10s%8s%6d",p->num,p->na,p->teacher,p->wtime,p->ttime,p->score); fclose(fp); }void prin(SUB head) {SUB p; if (head==NULL) {printf("没有选修课程记录!n"); return; }printf("欢迎进入东华理工大学2008-200年选修课系统(4-13)n"); printf("课程代码 课名 任教老师 上课星期 上课时间 学分n"); for(p=head;p;p->next) printf("%6d%10s%16s%12s%12s%d",p->num,p->na,p->teacher,p->wtime,p->ttime,p->score); }SUB inset(SUB head) {SUB ptr,ptr2,subj; char ch, ch1; printf("是否进行插入课程,如果需要插入请按回车建,不进行按空格结束!n"); ch=getchar(); while(ch!=' '){ subj=(SUB)malloc(sizeof(SUB)); ptr=subj; printf(" 输入要插入的课程信息:n"); scanf("%d%s%s%s%s%d",subj->num,subj->na,subj->teacher,subj->wtime,subj->ttime,subj->score); if(head==NULL){ head=ptr; head->next=NULL; }else{ for(ptr2=head;ptr2;ptr2=ptr2->next) if(ptr2->next==NULL){ ptr2->next=subj; subj->next=NULL; break; }ch='a'; }printf("继续请按回车建,结束请按空格:n"); ch1=getchar(); ch=getchar(); }return head; }SUB del(SUB head) {SUBp1,p2; char ch,ch1; int num; printf("是否进行课程删除,要删除请按回车键,不进行请按空格:n"); ch=getchar(); while(ch!=' ') {printf("输入要删除的课程代码:n"); scanf("%d",&num); if(head->num==num){ p2=head; head=head->next; free(p2); }if(head==NULL) return NULL; p1=head; p2=head->next; while(p2!=NULL){ if(p2->num==num){ p1->next=p2->next; free(p2); }else p1=p2; p2=p1->next; }printf("继续删除请按回车键,结束请按空格:n"); ch1=getchar(); ch=getchar(); }return head; }typedef struct student {int number; int classes; char chinesename[16]; char title [5][12]; struct student other; }STU; void scanf_form(SUB head) {int i,count,number,classes; char ch,title[3][12],chinesename[16]; scanf("%d%d%16s",&number,&classes,&chinesename); for(i=0;i<5;i++) {scanf("%s",&title[i]); count++; if(count==3) {ch=getchar(); if(ch!=' ') {title[3][12]='0'; title[4][12]='0'; i=5; ch='a'; }} if(count==4) {ch=getchar(); if(ch!=' ') {title[4][12]='0'; i=5; ch='a'; }} for(i=0;i<5;i++) {if(strcmp(title[i][12],head->na)!=0 && title[i][12]!='0') { printf("你输入的课程名不正确,请从新输入:n"); scanf_form(); }} }} STU study_form(SUBhead) {STU hand,tall,q; int i; char ch,ch1; hand=tall=NULL; printf("输入你个人信息,及选修的课名,以4个0结束:n"); printf("注:每个学生至少选修3门课,大于3门时按回车键继续,空格结束:n"); scanf_form(); while(number!=0) {q=(STU)malloc(sizeof(STU)); q->number=number; q->classes=classes; strcpy(p->chinesename,chinesename); for(i=0;i<5;i++) strcpy(p->title[i],title[i][12]); if(hand=NULL) hand=q; else tall->other=q; tall=q; scanf_form(); for(i=0;i<5;i++) {if(strcmp(title[i][12],head->na)!=0&&titli[i][12]!='0') { printf("你输入的课程名不正确,请从新输入:n"); scanf_form(); }} tall->other=NULL; return hand; }} void sefiles(STUhand) {STU q; FILE fq; fq=fopen("studennt.txt","w"); fprintf(fq, "学生选课信息表:n"); for(q=hand;q;q=q->other) fprintf(fq,"%16d%10d%16s%16s%16s%16s%16s%16s",q->number,q->classes,q->chinesename,q->title[0],q->title[1],q->title[2],q->title[3],q->title[4]); fclose(fq); }void prins(STUhand) {STU q; if(head==NULL) {printf("没有学生选课信息记录!n"); return; }printf("学生选课信息一览表:n"); printf("学号 班级 姓名 课名 :n"); for(q=hand;q;q->number) printf("%16d%10d%16s%16s%16s%16s%16s%16s",q->number,q->classes,q->chinesename,q->title[0],q->title[1],q->title[2],q->title[3],q->title[4]); }STU intserts(SUBhead,STU hand) {STU prt,prt2,stuj; int i; char ch,ch1; printf("是否要进行插入学生选课信息,如果需要请按回车建,结束请按0:n"); ch=getchar(); while(ch!=' ') {stuj=(STU)malloc(sizeof(STU)); prt=stuj; printf("输入要插入的学生选课信息:n"); scanf_form(); if(hand==NULL) {hand=prt; hand->other=NULL; }else {for(prt2=hand;prt2;prt2=prt2->other) if(prt2->other==NULL) {prt2->other=stuj; stuj->other=NULL; break; }ch='a'; }printf("继续插入请按回车建,结束请按空格:n"); ch1=getchar(); ch=getchar(); }return hand; }STU dells(STU hand) {STU q1,q2; char ch,ch1; int number; printf("是否进行学生选课信息删除,要删除请按回车建,不进行请按空格:n"); ch=getchar(); while(ch!=' ') {printf("输入要删除的学号:n"); scanf("%d",&number); if(hand->number==number) {q2=hand; hand=hand->other; free(q2); }if(hand=NULL) return NULL; q1=hand; q2=hand->other; while(q2) {if(q2->number==number) {q1->other=q2->other; free(q2); }else q1=q2; q2=q1->other; }printf("继续删除请按回车建,结束请按空格:n"); ch1=getchar(); ch1=getchar(); }return hand; }void search(STUhand) {int a,number; int t=1; char type[10],ch,ch1; STU prt; printf("是否进入查询,按回车键进入,空格结束:n"); ch=getchar(); while(ch!=' ') {printf("请输入要查询的学号:n"); for(prt=hand;prt;prt=prt->other) {if(number=prt->number) {printf("%16d%10d%16s%16s%16s%16s%16s%16s",prt->number,prt->classes,prt->chinesename,prt->title[0],prt->title[1],prt->title[2],prt->title[3],prt->title[4]); t=0; }if(t!=0) printf("未找到!n"); t=1; }printf("继续查找请按回车键,结束请按空格键:n"); ch1=getchar(); ch=getchar(); }} void main() {SUB head=create_form() ; sefile(head); prin(head); head= inset(head); head= del(head); STU hand=study_form(head); sefiles(hand); prins(hand); hand=intserts(head,hand); hand=dells(hand); search(hand); } 根据自己的需要,自己看着修改一下 ^^ #include #include int N1,N2,kk1,kk2,kk3; struct couse head1; struct student head2; struct couse//课程信息结构体 {int num1; char name1[20]; int score; int nelepeo;//课程已选人数 int Melepeo;//课程人数上限 struct couse next; }; struct student//学生信息结构体 {int num2; char name2[20]; int nelenum[50];//已选课程编号 int nelen;//已选课程数量 struct student next; }; void Ms() {for(kk1=0;kk1<1100;kk1++) for(kk2=0;kk2<1200;kk2++) for(kk3=0;kk3<1200;kk3++); }void keyboardc()//录入课程子函数(从键盘录入) {struct couse p1,p2; N1=0; p1=p2=(struct couse)malloc(sizeof(struct couse)); printf("课程编号t课程名称t学分t课程人数上限n"); scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo); p1->nelepeo=0; head1=NULL; while(p1->num1!=0) {N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct couse )malloc(sizeof(struct couse)); scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo); p1->nelepeo=0; }p2->next=NULL; }void filec()//录入键盘子函数(从文件录入) {FILE fp; char filepath[20]; struct couse p1,p2; N1=0; printf("输入要读入的文件路径:"); getchar(); gets(filepath); if((fp=fopen(filepath,"r"))==NULL) {printf("找不到%s文件!n",filepath); exit(0); }p1=p2=(struct couse)malloc(sizeof(struct couse)); fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo); head1=NULL; while(!feof(fp)) {N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct couse )malloc(sizeof(struct couse)); fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo); }p2->next=NULL; }void inputc()//录入课程主函数 {int i; printf("ttt录入课程信息n"); printf("n1.从键盘录入n"); printf("2.从文件录入n"); printf("3.返回主菜单n"); printf("请选择(1~3):n"); scanf("%d",&i); switch(i) {case(1):keyboardc();break; case(2):filec();break; case(3):break; }} void insertc(struct couse incouse)//课程管理子函数(增加课程) {struct couse p0,p1,p2; p1=head1; p0=incouse; if(head1==NULL) {head1=p0; p0->next=NULL; }else {while((p0->num1 > p1->num1) && (p1->next!=NULL)) {p2=p1; p1=p1->next; }if(p0->num1 <= p1->num1) {if(head1==p1) head1=p0; else p2->next=p0; p0->next=p1; }else {p1->next=p0; p0->next=NULL; }} N1=N1+1; }void delc(int num1)//课程管理子函数(删除课程) {struct couse p1,p2; if(head1==NULL) {printf("n没有课程,无法删除!n"); goto end; }p1=head1; while(num1!=p1->num1 && p1->next!=NULL) {p2=p1; p1=p1->next; }if(num1==p1->num1) {if(p1==head1) head1=p1->next; else p2->next=p1->next; printf("已删除该编号课程!n"); N1=N1-1; }else printf("无该编号的课程!n"); end:; }void mamentc()//课程管理主函数 {struct couse incouse; int i,num1; printf("ttt课程管理n"); printf("1.新增课程n"); printf("2.删除课程n"); printf("3.返回主菜单n"); printf("请选择(1~3):n"); scanf("%d",&i); switch(i) {case(1): {incouse=(struct couse )malloc(sizeof(struct couse)); printf("课程编号t课程名称t学分t课程人数上限n"); scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo); incouse->nelepeo=0; insertc(incouse); break; }case(2): {printf("请输入要删除课程的编号:n"); scanf("%d",&num1); delc(num1); break; }case(3):break; }} void keyboards()//录入学生信息子函数(从键盘录入) {int i; struct student p1,p2; N2=0; p1=p2=(struct student )malloc(sizeof(struct student)); printf("学生学号t学生姓名n"); scanf("%d%s",&p1->num2,p1->name2); p1->nelen=0; for(i=0;i<20;i++) p1->nelenum[i]=0; head2=NULL; while(p1->num2!=0) {N2=N2+1; if(N2==1)head2=p1; else p2->next=p1; p2=p1; p1=(struct student )malloc(sizeof(struct student)); scanf("%d%s",&p1->num2,p1->name2); p1->nelen=0; for(i=0;i<20;i++) p1->nelenum[i]=0; }p2->next=NULL; }void files()//录入学生信息子函数(从文件录入) {int i=0; FILE fp; char filepath[20]; struct student p1,p2; N2=0; printf("输入要读入的文件路径:"); getchar(); gets(filepath); if((fp=fopen(filepath,"r"))==NULL) {printf("找不到%s文件!n",filepath); exit(0); }p1=p2=(struct student)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); head2=NULL; while(!feof(fp)) {i=0; N2=N2+1; if(N2==1)head2=p1; else p2->next=p1; p2=p1; p1=(struct student )malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); }p2->next=NULL; }void inputs()//录入学生信息主函数 {int i; printf("ttt录入学生信息n"); printf("n1.从键盘录入n"); printf("2.从文件录入n"); printf("3.返回主菜单n"); printf("请选择(1~3):n"); scanf("%d",&i); switch(i) {case(1):keyboards();break; case(2):files();break; case(3):break; }} void inserts(struct student incouse)//学生信息管理子函数(填加学生信息) {struct student p0,p1,p2; p1=head2; p0=incouse; if(head2==NULL) {head2=p0; p0->next=NULL; }else {while((p0->num2 > p1->num2) && (p1->next!=NULL)) {p2=p1; p1=p1->next; }if(p0->num2 <= p1->num2) {if(head2==p1) head2=p0; else p2->next=p0; p0->next=p1; }else {p1->next=p0; p0->next=NULL; }} N2=N2+1; }void dels(int num2)//学生信息管理子函数(删除学生信息) {struct student p1,p2; if(head2==NULL) {printf("n没有该学生信息,无法删除!n"); goto end; }p1=head2; while(num2!=p1->num2 && p1->next!=NULL) {p2=p1; p1=p1->next; }if(num2==p1->num2) {if(p1==head2) head2=p1->next; else p2->next=p1->next; printf("已删除该学生信息!n"); N2=N2-1; }else printf("无该学号的学生!n"); end:; }void maments()//学生信息管理主函数 {struct student incouse; int i,num2; printf("ttt学生信息管理n"); printf("1.新增学生信息n"); printf("2.删除学生信息n"); printf("3.返回主菜单n"); printf("请选择(1~3):n"); scanf("%d",&i); switch(i) {case(1): {incouse=(struct student )malloc(sizeof(struct student)); incouse->nelen=0; incouse->nelenum[0]=0; printf("学生学号t学生姓名n"); scanf("%d%s",&incouse->num2,incouse->name2); inserts(incouse); break; }case(2): {printf("请输入要删除学生的学号:n"); scanf("%d",&num2); dels(num2); break; }case(3):break; }} void elect(struct student s)//选课 {struct couse p; int num1,i; printf("请输入要选课的编号:n"); scanf("%d",&num1); for(i=0;s->nelenum[i]!=0;i++); s->nelenum[i]=num1; (s->nelen)++; p=head1; while(p->num1!=num1) p=p->next; (p->nelepeo)++; }void cheak()//学生选课子函数(查询可选课程) {char e; struct couse c; struct student s; int num2,i,j=0,t=0; printf("请输入你的学号:"); scanf("%d",&num2); s=head2; while(s->num2!=num2 && s->next!=NULL) s=s->next; if(s->num2!=num2) {printf("不存在你的信息,请进入主菜单录入你的信息!n"); goto end; }c=head1; printf("你的可选课程编号:n"); while(c!=NULL) {for(t=0,i=0;s->nelenum[i]!=0;i++) {if(c->num1==s->nelenum[i]) t=1; }if(t==0 && (c->nelepeo!=c->Melepeo)) {printf("%dn",c->num1); j++; }c=c->next; }if(j==0) {printf("你已选完所有课程,无法再多选!n"); goto end; }printf("选课(y/n)?:n"); getchar(); e=getchar(); i=0; while(e=='y') {elect(s); printf("继续选课(y/n)?:n"); getchar(); e=getchar(); }end:; }void back(struct student p)//退课 {struct couse p1; int num1,i,j; printf("请输入你要退掉的课程编号:n"); scanf("%d",&num1); p1=head1; while(p1->num1!=num1) p1=p1->next; for(i=0;p->nelenum[i]!=num1;i++); for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1]; p->nelenum[--j]=0; (p1->nelepeo)--; printf("退课成功!n"); }void hcheak()//学生选课子函数(查询已选课程) {char c; struct couse p0; struct student p; int num2,i,f=0; printf("请输入学号:n"); scanf("%d",&num2); p=head2; while(p->num2!=num2 && p!=NULL) p=p->next; if(p==NULL) {printf("不存在你的信息,请回主菜单录入信息:n"); goto end; }printf("已选课程编号:n"); if(p->nelenum[0]==0) {printf("你还没选课!n"); goto end; }for(i=0;p->nelenum[i]!=0;i++) {printf("%dn",p->nelenum[i]); p0=head1; while(p0->num1!=p->nelenum[i]) p0=p0->next; f=f+p0->score; }printf("总学分:%dn",f); printf("是否进行退课(y/n)?"); getchar(); c=getchar(); while(c=='y') {back(p); printf("继续退课(y/n)?"); getchar(); c=getchar(); (p->nelen)--; }end:; }void elective()//学生选课主函数 {int i; printf("ttt学生选课n"); printf("1.查询可选课程n"); printf("2.查询已选课程n"); printf("3.返回主菜单n"); printf("请输入(1~3):n"); scanf("%d",&i); switch(i) {case(1):cheak();break; case(2):hcheak();break; case(3):break; }} void listc()//输出课程信息 {struct couse p; p=head1; printf("课程编号 课程名称 学分 课程已选人数 课程人数上限n"); while(p!=NULL) {printf("%-8d%10s%6d%8d%12dn",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo); p=p->next; }} void lists()//输出学生信息 {struct student p; p=head2; printf("学生学号 学生姓名 已选课程数量n"); while(p!=NULL) {printf("%-4d %10s %6dn",p->num2,p->name2,p->nelen); p=p->next; }} void intoc()//存储课程信息 {FILE fp; struct couse p; char filepath[30]; printf("输入课程信息要保存的文件路径:"); getchar(); gets(filepath); if((fp=fopen(filepath,"w"))==NULL) {printf("n保存失败!"); exit(0); }p=head1; while(p!=NULL) {fprintf(fp,"%d %s %d %d %dn",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo); p=p->next; }fclose(fp); printf("课程信息已保存在%s中!n",filepath); }void intos()//存储学生信息 {FILE fp; struct student p; char filepath[30]; printf("输入学生信息要保存的文件路径:"); getchar(); gets(filepath); if((fp=fopen(filepath,"w"))==NULL) {printf("n保存失败!"); exit(0); }p=head2; while(p!=NULL) {fwrite(p,sizeof(struct student),1,fp); p=p->next; }fclose(fp); printf("学生信息已保存在%s中!n",filepath); }void into()//存储信息 {int i; printf("1.存储课程信息n"); printf("2.存储学生信息n"); printf("3.返回主菜单n"); printf("请输入(1~3)n"); scanf("%d",&i); switch(i) {case(1):intoc();break; case(2):intos();break; case(3):break; }} void store()//信息主函数 {int i; printf("tt系统信息查看及存储n"); printf("1.查看课程信息n"); printf("2.查看学生信息n"); printf("3.存储信息n"); printf("4.返回主菜单n"); printf("请输入(1~4):n"); scanf("%d",&i); switch(i) {case(1):listc();break; case(2):lists();break; case(3):into();break; case(4):break; }} int main()//主函数 {int i; start: printf("nttt欢迎使用学生选课系统!n"); printf("菜单:n"); printf("1.录入课程信息n"); printf("2.课程管理n"); printf("3.录入学生信息n"); printf("4.学生信息管理n"); printf("5.学生选课n"); printf("6.系统信息查看及存储n"); printf("7.退出系统n"); printf("n请输入菜单选项(1~7):n"); scanf("%d",&i); if(i<1 || i>7) {printf("输入错误,请重输:n"); goto start; }switch(i) {case(1): {("cls"); inputc(); goto start; break; }case(2): {("cls"); mamentc(); goto start; break; }case(3): {("cls"); inputs(); goto start; break; }case(4): {("cls"); maments(); goto start; break; }case(5): {("cls"); elective(); goto start; break; }case(6): {("cls"); store(); goto start; break; }case(7): {("cls"); printf("感谢使用本系统!nn再见!n"); }} return(0); } 设每个记录有下列数据项:电话号码、用户名、地址; (2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; (3) 采用双重散列法或拉链法解决冲突; (4) 查找并显示给定电话号码的记录; (5) 查找并显示给定用户名的记录。 四、最短路径问题 ? 问题描述 交通网络中常常提出这样的问题:两地之间是否有路相通?在有多条通路的情况下,哪一条最短?以上问题就是带权图中求最短路径的问题。 ? 基本要求 ⑴用Dijkstra算法求最短路径,图中的顶点数n不得少于10个。 ⑵用户输入源点和目标点后,程序应输出源点到目标点的最短路径,并计算出途中所需时间或花费的交通费用。 五、内部排序算法的比较 ? 问题描述 在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶或大概执行时间。试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 ? 基本要求 ⑴对以下6种常用的内部排序算法进行比较:直接插入排序、直接选择排序、冒泡排序、希尔排序、堆排序、快速排序 ⑵待排序表的表长不小于100,其中的数据可用随机函数产生;至少要用5组不同的输入数据作比较,比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计3次移动) ⑶执行相应排序算法时,应在屏幕上输出必要的提示信息及排序的结果。要输出一个各种排序算法的关键字比较次数和移动次数对比表,并对结果做出简单分析图书管理系统--数据结构课程设计
数据结构课程设计
C语言学生选修课系统
用数据结构(c语言版)编写的学生选课系统
数据结构课程设计 十万火急啊!!!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。