C语言 cgi(3)
1
cs3157 – Advanced Programming
Summer 2014, Project 1, 150 points
June 17, 2014
Follow these step-by-step instructions. This homework must be submitted electronically by
Sunday night July 6th, 11pm. Please start early, so we can help if you get stuck.
In this project you will be making use of c’s pointers, arrays, dynamic memory allocation, i/o and your
perl knowledge etc.
Goal: the overall goal of your project is to develop a website which allows you to coordinate a shared
calendar between users. Any user can create a meeting (think of a class) which a specific schedule
(weekly, monthly, etc). A meeting has a title, subject, time, address, and description associated with it.
Creativity counts, so feel free to improvise as long as you cover the general gist of the assignment.
I am breaking down the assignment into section parts and then into steps to allow you to manage the
project more efficiently. In addition we will be doing some of the work in class.
Do not forget to comment, and create a makefile for the project. Please break the project into relevant .h
and .c files so that it is easier to maintain and debug. In you readme make sure to note what each file does,
and how each step is related to a specific file. You should submit final files which everything working (as
much as you can). In addition, if you will need to demonstrate a working website to the TA either via
showing it on your laptop or on a publicly available webspace. The front end cgi can be perl if you like,
but the underlying data should be in c/c++ as relevant. For all design decisions please document in the
README file.
Step 1 (15 points) Initial Login Page
Create a single cgi file which when loaded up for the first time presents the user with a login form (that is
there is no external html page only output from the cgi on empty input).
The form should contain a user field box and password field box. When typed, the password should show
stars and not text. You should name this file MainProject1.c and create a MainProject1.h. The form action
destination should point to the script itself.
The top of the page should contain the title. The bottom of the main page you should display some
information about yourself (and link to your homepage if you have one). Feel free to make it as fancy as
you like.
Step 2 (25 points) Create account
Add a link to the initial page saying “click here to create an account”. This should call a
CreateAccount.cgi program which will ask the user for their name, password, and email and add it to a
password file.
The password file is a simple text file with the following format:
USER=MD5PASSWORD=email
USER2=MD5PASSWORD2=email2
2
Each password is kept as an md5 of the password, and = can not be part of the user name.
Before adding a new user to the file you should check if it is in the file already. If its not you can append
it to the end.
Verify this works by creating 2 accounts, and then visually inspecting the password.txt file.
When this script is done, it should spit out the original login page. You can do this by calling the
appropriate function which renders the page from the other.c file (ask me if this isn’t clear). This is why
we split out the html page into a separate function in class.
You should use pointers, make sure you are freeing the memory. As discussed in class, use any md5
library you want.
Step 3 (30 points) Main page
If the original cgi is presented with a user name and password, you need to verify it in the password file.
If it is verified, you will now create a subdirectory in the system to store appointments for the user (only
done first time).
Now the user is presented with the following links:
1) add new meeting
this will allow the user to add a new meetings into the system with another form
2) view all meetings
this will show all current meetings added to the system by this user
3) system information
show some information such as how many meetings are in the system and how many users
for each of the above steps you should be calling the original script. Which means you need to embed
information in the link when you call yourself. For example you can create a link for a test.cgi and pass
information:
<a href=”test.cgi?todo=newmeet”>Click here for new appointment</a>
that will pass in a query string with todo set to “newmeet” so your script can check for that combination
and act appropriately.
Now add appropriate forms for a new meeting. Here you will collect the start date, start time, end date,
end time, subject, and text info about the meeting. You need to decide how to save the meeting
information as a file. For example you can choose each meeting as a separate file in a unique directory
(made up from the usersname) and name them with the “startdate-starttime.app.txt”.
For the view all meetings you can simply spit back a large html page with all the information….you
should look into html tables as a way of organizing the information nicer.
System information should run through all users directories and collect the correct stats info.
3
Step 4 (30 points) Navigation page
We want to add a browser-able calendar feature. The idea is that once a user logs in, they can browse
through an html calendar (basically a large html table with 7 columns (ie day of week) and be able to click
on a entry to add an event.
You will be creating a calendar class which will be able to take a month to display and be able to print out
the month correctly.
The English calendar has probably the simplest rules for figuring out how many days per month. Trickier
is to figure out what the day of the week is…..if you can’t think of a trick please email me for hints…
Note that the cells in the calendar page should be passing in information to whatever cgi component or
argument is responsible for creating events.
Step 5 (30 points) Search Engine
We will now add a search capability for the specific user’s schedule. Present a form which allows the user
to query their
1) entire schedule history (show all appointments)
2) all schedules between 2 dates (starting and end date)
3) all schedule between 2 dates (starting and end) and between specific times (example : all
appointments between july 1 2014 and july 20 2014, between 10:00 am and 11:00 am
4) search through the text info for specific string.
This might require you to reorganize the appointment representation on the back end. No reason why
the data might not be stored in multiple forms to help search.
In order to do this step cleanly, create a search class which has specific functions to help specific
searches. For example step 2 and 3 are related and can be coded as one function if you play around
with the times.
Step 6 (30 points) Find a free spot
In this step you want the user to be able to schedule a group appointment between X users on the system.
You will need to allow the user to check off specific users on the system (will need to list all current
users).
Then the user can input a starting date (july 15, 2014), starting time (11am) and length of time (3 hour
appointment (meeting) ).
The system needs to search though all the users and find the first occurring timeslot where everyone is
free for the length of the appointment.
You need to show both first free timeslot and first date which has that time and free time slot.
So for the above example, you might return
1) July 15, 2014 at 6:00pm everyone is free for 3 hours.
2) July 20, 2014 at 11am everyone is free for 3 hours.
4
The user can then click on one of the above and it will insert a group appointment into everyone’s
schedule.
Good Luck and Extra Credit for graphics and originality.
Submit your project.
You need to submit the following files for this homework: README, Makefile, plus all the files
generated above. Submit it over courseworks.
C语言 cgi(3)的更多相关文章
- 搭建简易的c语言与python语言CGI和Apache服务器的开发环境
搭建简易的c语言CGI和Apache服务器的开发环境 http://www.cnblogs.com/tt-0411/archive/2011/11/21/2257203.html python配置ap ...
- 基于windows IIS的C语言CGI WEB服务器环境搭建
网页编程对我来说特别亲切,因为我就是从html.ASP.PHP一步步接触编程的.自己的编程爱好也是从那里一点一点被满足.不过离开大学之后很久没有碰过WEB了,最近看到嵌入式中的涉及到的web服务器,了 ...
- C语言cgi(1)
1Columbia Universitycs3157 – Advanced ProgrammingSummer 2014, Lab #2, 60ish pointsJune 9, 2014Follow ...
- C语言 cgi(2)
1Columbia Universitycs3157 – Advanced ProgrammingSummer 2014, Lab #3, 40 pointsJune 10, 2014This lab ...
- c语言cgi笔记
直接输出接收的数据 #include <stdio.h>#include <stdlib.h>main(){int i,n;printf ("Content-type ...
- 几种语言的CGI编程
为了了解PHP.JSP.ASP出现之前人们写网站的方法,洒家研究了一波CGI,使用C.Python.batch.shell script语言写了几个简单的网页. CGI即通用网关接口,指web服务器调 ...
- CGI(通用网关接口)
公共网关接口 CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在C ...
- cgic 写CGI程序
CGIC是C语言CGI库函数,用于编写CGI程序 CGIC 主要完成以下功能: * 对数据进行语法分析 * 接收以 GET 和 PSOT 两种方式发送的数据 * 把 FORM 中的不同域连接成连续的串 ...
- libctemplate——C语言模块引擎简介及使用
前言 由先声明此libctemplate不是Google那个ctemplate.这个库是用C语言实现的,只有一个实现文件和一个头文件.Gooogl的ctemplate是C++实现的,和线程还扯上了关系 ...
随机推荐
- 与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息
原文:与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 [索引页][源码下载] 与众不同 windows ph ...
- [Java 8] (6) Lambda与资源管理
资源处理 Java本身自带了垃圾回收(Garbage Collection)功能.可是仅仅有垃圾回收的目标是内部资源(Internal Resource),典型的比方堆上分配的内存区域等.对于外部资源 ...
- ThinkPhp学习05
原文:ThinkPhp学习05 一.ThinkPHP 3 的CURD介绍 (了解)二.ThinkPHP 3 读取数据 (重点) 对数据的读取 Read $m=new Model('User') ...
- codeforces 598D Igor In the Museum
题目链接:http://codeforces.com/problemset/problem/598/D 题目分类:dfs 题目分析:处理的时候一次处理一片而不是一个,不然会超时 代码: #includ ...
- VC生成的DLL给QT的EXE调用时lib路径问题小结
VC生成的DLL给QT调用,有两种方式,一种是隐式调用调用(使用.lib文件方式): ① 在*.pro工程文件中添加VC生成的lib文件路径时,或者使用一个绝对路径,如: LIBS += " ...
- 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 注 ...
- Unity3D游戏开发之开发游戏带来的问题
昨日曾就某投资人把移动团队失败原因之中的一个归于选择Unity引擎进行了一番评论,工具本身无罪,但怎样理解工具.正确使用Unity引擎确实须要讨论,在选择Unity之前你也许须要了解下这个引擎实际开发 ...
- 基于三星I9250演示自己弄的Miracast功能-手机对手机
最终把Miracast功能測试通了,为了节省时间.我的Source端和Sink端都採用同一个机型.这样能够降低我为目标机编译4.4.2源码所耗费的时间.今天简单录制了一段视频.视频是用手机录制的,室内 ...
- Typings实现智能
在Visual Studio Code中通过Typings实现智能提示功能 前言 我们知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也有一些简单的提示,但这是通过代码片段提供的.功能 ...
- DataGirdView 设置单元格居中
设置标题行居中: dgvShow.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter ...